在Django中构建成员身份的正确方法是什么?

时间:2015-02-23 15:18:50

标签: django django-models

假设我有一个包含团队和成员的网站。我有一个团队模型和一个成员模型:

class Team(models.Model):
    name = CharField()

class Member(models.Model):
    name = models.CharField()
    team = models.ManyToManyField(Team)

在此关系中,TeamMember使用ManyToManyField直接相关(成员可以拥有多个团队)。

这意味着我在视图中添加和删除团队成员,如下所示:

team.objects.add(member)  # Add a member to a team
team.objects.remove(member)  # remove a member from a team

另一种方法是删除ManyToMany关系并在团队和成员之间建立“成员资格”模型,如下所示:

class Membership(models.Model):
    is_active = BooleanField(default=True)
    team = models.ForeignKey(Team)
    member = models.ForeignKey(Member)

这样,要将成员链接到某个团队,我会get_or_create Membership个实例。要删除或重新添加该成员,我会切换is_active标记,而不是add()remove() ManyToMany关系。

使用直接关系的团队中的add()remove()成员是否更容易出错?或者在中间get_or_create上使用Membership会更好模型?

或者,使用是正确还是罚款?

1 个答案:

答案 0 :(得分:1)

我认为你真正需要的是决定 - >你需要extra data on your M2M relationship吗?因为你的中间模型就是这样。而且我发现它不容易出错,与它的is_active标志的主要区别在于它为您提供了类似过去成员资格的历史信息。你需要这些数据吗?如果你这样做 - 采用这种方法。如果你只是因为你认为它不那么容易出错,那么对我来说你就是在解决错误的问题。

相关问题