Django的反向关系与递归M2M关系

Django的反向关系与递归M2M关系

问题描述:

试图从文档中这里展开:https://docs.djangoproject.com/en/1.10/topics/db/models/#extra-fields-on-many-to-many-relationshipsDjango的反向关系与递归M2M关系

的情况下更容易理解,Person对象,与自己M2M关系定义了两个人之间的“关系型”,像父/子/从事

我Models.py:

RELATIONSHIPS = (

    (0, 'Child'), 
    (1, 'Parent'), 
    (2, 'Engaged'), 
) 

class Person(models.Model): 
    code = models.AutoField(primary_key=True, verbose_name="Person Code") 
    name = models.CharField(max_length=150, blank=True, null=True, verbose_name="Name") 

    relationships = models.ManyToManyField(
     'self', 
     through = 'Person_Person', #This lets you define the model that will act as an intermadiary 
     symmetrical = False, #This needs to be set with recursive relationships 
     ) 

class Person_Person(models.Model): 
    person_1 = models.ForeignKey('Person', on_delete=models.CASCADE, 
     related_name='%(class)s_person_1', verbose_name="Person 1") 
    person_2 = models.ForeignKey('Person', on_delete=models.CASCADE, 
     related_name='%(class)s_person_2', verbose_name="Person 2") 
    relationship_type = models.IntegerField(choices = RELATIONSHIPS, default = 5, verbose_name="Relation") 

测试代码:

p1 = Person.objects.create(name = 'Man') 
p2 = Person.objects.create(name = 'Woman') 

relation = Person_Person(person_1 = p1, person_2 = p2, relationship_type = 2) 
reation.save() 

print(p1.relationships.all(), p2.relationships.all()) 
#>><QuerySet [<Person: 108 Woman>]> 
#>><QuerySet []> 

现在对于这个问题,p2的关系字段queryset返回为空,我明白为什么当你考虑一个非递归关系时,但在这种情况下调用p2.relationships_set是没有意义的,即使它做到了,我会如何知道Personperson_1还是person_2的关系?

任何建议,欢迎

这似乎是 How to make recursive ManyToManyField relationships that have extra fields symmetrical in Django? 重复,但我不能将它们标记

Basicly这不是在Django可能因为你必须定义symmetrical=False。 您可以选择另外添加另一个m2m字段。另一个线程有一些很好的读数