0

我正在 Django 中编写一个项目,其中有 5 种用户组:

  • 第 1 组
  • 第 2 组
  • ...

然后我有一个模型,与用户有很多关系的项目,项目有一个所有者(Group1 中的一个用户)、一个客户(Group2 中的一个用户)和许多相关用户(Group3 中的用户)。

我想知道哪种是编写这种关系的正确方法。我很想写一些类似的东西:

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

以某种方式定义了 Owner、Customer 和 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')

主要是因为从空数据库组“客户”开始时不存在并引发错误。

哪种方式是负担得起的?

提前致谢

4

1 回答 1

0

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

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

您可以通过为 Groups 模型创建一个固定装置来解决从新数据库开始时没有定义组的问题。夹具是一个文本文件(默认为 JSON 格式),它定义了一组数据,可以轻松地自动或手动加载到数据库中。可以使用dumpdata管理命令从现有数据轻松创建夹具。

如果您希望自动加载夹具(当您运行 syncdb 时),fixtures请在您的应用程序中创建一个目录,并将夹具命名为initial_data。您还可以创建其他夹具并使用命令加载它们,或者通过为特定loaddata的列表指定一个列表来在您的测试中加载它们fixturesTestCase

于 2010-06-02T15:54:30.943 回答