我正在创建一个带有两个指向同一字段的ManyToManyField的Django模型。
在我的例子中,人才和兴趣都是“技能”,但有不同的通过表。
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',)>]
所以有几个问题:
答案 0 :(得分:1)
你有两个名称相同的模型字段users
,第二个(到InterestDetails)正在替换第一个,只是给它们不同的名称,它会起作用。
答案 1 :(得分:-1)
你所问的真的没有意义。显然,一个字段只能有一组选项,而你试图有两组。但目前尚不清楚为什么要这样做:我明白这两个领域都是连接相同的两个表,但是他们正在对不同的东西进行建模:第一个领域是“拥有此技能作为天赋的用户”,另一个领域是'将此技能作为兴趣的用户'。因此,您应该有两个字段,都指向UserProfile但名称不同 - 例如users_with_talent
和users_with_interest
。
(请注意,除非您定义有关关系的额外信息,否则无需明确定义直通表。)