代码之家  ›  专栏  ›  技术社区  ›  Enrico Carlesso

管理器、模型继承还是django中的用户切片?

  •  0
  • Enrico Carlesso  · 技术社区  · 14 年前

    • 组1
    • ...

    我有个模特, 项目 它与用户有许多关系,项目有一个所有者(组1中的用户)、一个客户(组2中的用户)和许多相关用户(组3中的用户)。

    class Item(models.Model):
        owner = models.ForeignKey(Owner)
        customer = models.ForeignKey(Customer)
        users = models.ManyToManyField(RelatedUser)
    

    我不知道如何做到这一点。我不想使用模型继承,因为我只需要一个表用户。即使是经理似乎也帮不了我。实际上我用的是这样的东西:

    try:
        customer = models.ForeignKey(User,
                                  related_name='cust',
                                  limit_choices_to = {'groups__in': [Group.objects.get(name = 'customers')]})
    except:
        customer = models.ForeignKey(User,
                                  related_name='cust')
    

    主要是因为在启动表单时,空数据库组“customers”不存在,并且会引发错误。

    哪种方式才是买得起的?

    提前谢谢

    1 回复  |  直到 14 年前
        1
  •  0
  •   Chris Lawlor    14 年前

    您可以为每个用户类型定义单独的模型-每个模型都有一个ForiegnKey to user。优点是简单,但缺点是这种方法添加了多个表,并且如果以后需要添加更多的组,则不具有特别的可扩展性。

    另一个选项是定义一个Groups模型,它存储不同类型的可用组,并且与用户有很多关系(假设一个用户可以在多个组中)。

    通过为groups模型创建fixture,可以解决从新数据库启动时没有定义组的问题。fixture是一个文本文件(默认为JSON格式),它定义了一组可以轻松地自动或手动加载到DB中的数据。可以使用 dumpdata

    如果希望自动加载装置(运行syncdb时),请创建 fixtures 目录,并命名装置 initial_data . 也可以创建其他装置并使用 loaddata 命令,或在测试中指定 fixtures list for a particular TestCase

    推荐文章