同じフィールドを指す2つのManyToManyFieldsを使用して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',)>]
だからいくつかの質問:
- 2番目のクエリが失敗するのはなぜですか?
- これは、同じフィールドに複数の「スルー」テーブルを指定するコーシャの方法ですか、それともこれを行うためのより良い方法がありますか?