假設我有一個包含團隊和成員的網站。我有一個團隊模型和模型成員:構建Django成員資格的正確方法是什麼?
class Team(models.Model):
name = CharField()
class Member(models.Model):
name = models.CharField()
team = models.ManyToManyField(Team)
在這種關係中,Team
和Member
使用的是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()
成員,或者是它更好地在中間Membership
模型使用get_or_create
?
或者,要麼正確和罰款使用?
我不太清楚你在這裏問的是什麼:'是否更容易出錯'似乎是一個相當主觀的問題。請注意,您可以通過將Membership作爲'through'參數設置到ManyToManyField來結合這些方法。 – 2015-02-23 15:23:32
@DanielRoseman我聽說在數據庫級使用'add()'和'remove()'可能更容易出錯,而不是簡單地在中間模型上翻轉一個標誌?也許情況並非如此? – YPCrumble 2015-02-23 15:24:58