我創建了一個Django模型,其中兩個ManyToManyField指向同一個字段。在Django的相同字段中指定多個「through」表
在我的例子中,人才和興趣既是「技能」,也有不同的表格。
class Skills(models.Model):
def __unicode__(self):
return self.name
name = models.CharField(max_length=255, unique=True)
users = models.ManyToManyField(UserProfile, default=None,
through='TalentDetails', related_name='talents')
users = models.ManyToManyField(UserProfile, default=None,
through='InterestDetails', related_name='interests')
我在嘗試通過時,其相關的名字
UserProfile.interests.all() #[<Skills: Guitar>]
UserProfile.talents.all() # AttributeError: 'UserProfile' object has no attribute 'talents'
# the following works
UserProfile.talentdetails_set.all() # [<TalentDetails: (u'Architecture',)>]
訪問人才,使幾個問題的錯誤:
- 爲什麼第二次查詢失敗?
- 這是一個在同一領域指定多個「通過」表的猶太教方式,還是有更好的方式來做到這一點?
true。但我想避免使用兩個字段(例如user和user_)來指定相同的關係(用戶)。如果我將關係指定爲不對稱,我可以讓Skill字段在其與UserProfile的關係中使用兩個不同的「通過」表嗎? –
2013-03-15 16:44:20
我認爲我們需要更好地理解你在這裏試圖建模的整體問題,感覺就像你可能試圖以錯誤的方式解決它。 – 2013-03-15 16:47:47
這可能很好。我正在建立一個人才/興趣目錄。才能和興趣都代表了從技能到個人資料的關係。這個關係的細節在[Talent | Skill]細節表中被捕獲。現在,我正在嘗試創建兩個「通過」從技能到配置文件的表來模擬這種關係。我想我可以使用一個帶有旗幟的「通過」表來表明它是否是一個人才/技能,但這不是一個非常優雅的解決方案...... – 2013-03-15 16:52:43