0

をthrough_field私はただ、例えば、intermediatoryモデルのネストされたフィールドには、中間モデルネストされたフィールドに

through_fieldを設定することができますどのような方法があります:

class Person(models.Model): 
    name = models.CharField(max_length=50) 

class Group(models.Model): 
    name = models.CharField(max_length=128) 
    members = models.ManyToManyField(
     Person, 
     through='Membership', 
     through_fields=('assignee__group', 'person'), 
    ) 

class GroupLeader(models.Model) 
     identity = models.ForeignKey(Person) 
     group = models.ForeignKey(Group) 
     #more fields 

class Membership(models.Model): 
    assignee = models.ForeignKey(GroupLeader) 
    person = models.ForeignKey(Person, on_delete=models.CASCADE) 
    # more fields 

私はそれをやってみましたが、私はエラーを取得しています:

The intermediary model 'Membership' has no field 'assignee__group' 

注:上記のような状況が発生した場合に備え、単なる一例です。

答えて

1

あなたのグループリーダーはM2M関係の一部であってはなりません。これはただmetadataです。だからgroupMembershipクラスに追加するだけです。

class Person(models.Model): 
    name = models.CharField(max_length=50) 

class Group(models.Model): 
    name = models.CharField(max_length=128) 
    members = models.ManyToManyField(
     Person, 
     through='Membership', 
    ) 

class GroupLeaders(models.Model) 
     identity = models.ForeignKey(Person) 
     group = models.ForeignKey(Group) 


class Membership(models.Model): 
    group = models.ForeignKey(Group, on_delete=models.CASCADE) 
    person = models.ForeignKey(Person, on_delete=models.CASCADE) 
    assignee = models.ForeignKey(GroupLeaders) 

またはあなたも完全に会員で、それを組み合わせることは賢明ではないように私のgroupleaderモデルは、いくつかのより多くの情報を保持しているとGroupLeadersクラス

class Person(models.Model): 
    name = models.CharField(max_length=50) 

class Group(models.Model): 
    name = models.CharField(max_length=128) 
    members = models.ManyToManyField(
     Person, 
     through='Membership', 
     through_fields=('group', 'person'), 
    ) 

class Membership(models.Model): 
    group = models.ForeignKey(Group, on_delete=models.CASCADE) 
    person = models.ForeignKey(Person, on_delete=models.CASCADE) 
    leader = models.ForeignKey(Person, on_delete=models.CASCADE, 
     related_name="leading_memberships", 
    ) 
+0

を取り除くことができます。グループリーダーが既に持っているメンバーシップにグループを追加する必要がありますか? – dnit13

+0

はい、あなたはメンバーシップのグループフィールドが必要です。これは人とグループとの関係です。誰がリーダーであっても、「担当者」は同じグループのリーダーであると主張する責任があります。このグループからの全員のメンバーシップを変更すると、ある人が自分のグループのリーダーになれない、またはグループを変更したとします。 – Todor

関連する問題