0

同じフィールドを指す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番目のクエリが失敗するのはなぜですか?
  • これは、同じフィールドに複数の「スルー」テーブルを指定するコーシャの方法ですか、それともこれを行うためのより良い方法がありますか?
4

2 に答える 2

1

同じ名前の 2 つのモデル フィールドがありusersます。

于 2013-03-15T16:29:49.403 に答える
-1

あなたが求めていることは本当に意味がありません。明らかに、フィールドには1セットのオプションしか含めることができず、2セットを設定しようとしています。しかし、なぜそれをしたいのかは明確ではありません。両方のフィールドが同じ2つのテーブルをリンクしていることは理解していますが、それらは異なるものをモデル化しています。最初のフィールドは「このスキルを才能として持っているユーザー」であり、もう1つは「このスキルを興味のあるユーザー。そのため、2つのフィールドが必要です。どちらもUserProfileを指していますが、名前は異なります(例:users_with_talentと)users_with_interest

(関係に関する追加情報を定義しない限り、スルーテーブルを明示的に定義する必要はないことに注意してください。)

于 2013-03-15T17:05:53.587 に答える