我正在研究Django中某些模型的設計,並希望得到一些建議。我有一個團隊模型,許多用戶可以參與其中。用戶也可以是許多團隊的成員,但他們不能兩次成爲同一團隊的成員。我還想跟蹤每個團隊/用戶組合的單獨信息。最重要的是,每個團隊都會有一個「管理員」,但每個團隊可能只有一個管理員。我有一些凝結的數據模型定義如下:Django中的多對多關係
class Team(models.Model):
name = models.CharField()
members = models.ManyToManyField(User, through='Membership')
admin = models.ForeignKey(User)
class Membership(models.Model):
user = models.ForeignKey(User)
team = models.ForeignKey(Team)
extra_data = models.CharField()
所以我想我的兩個問題是:
1)我將如何讓這個在會員制模式,沒有用戶和團隊組合出現了較比一次?
2)有沒有更好的方式來表示團隊中的管理員,同時確保每個團隊只有一個?看起來如果我像這樣存儲管理員,同時強制只有一個管理員的規則,查詢所有團隊成員變得過於繁瑣,因爲管理員不會在Membership表中。如果它們存儲在成員資格中,則比我不得不執行另一個查詢來查看它們是否是該團隊的管理員。想到在會員中使用「is_admin」字段的想法突然出現在我的腦海中,但我不確定如何保持每個團隊1個管理員的約束。
任何幫助將不勝感激。
更新: 看起來像unique_together元標記是我正在尋找第一個問題。我還是很好奇,雖然第二個....
我認爲你是正確的管理關係生活在團隊模式湖從關係的性質來看,這是最合適的地方。 QuerySet API可以讓你得到任何你想要的,通常只有最少數量的查詢。 – 2011-05-10 22:26:12