我的模型:
class Person(SchoolModel):
first_name = models.CharField(max_length=75)
last_surname = models.CharField(max_length=75)
students = models.ManyToManyField('self', through='StudentParent',
through_fields=('parent', 'student'), related_name='+')
parents = models.ManyToManyField('self', through='StudentParent',
through_fields=('student', 'parent'), related_name='+')
class StudentParent(SchoolModel):
student = models.ForeignKey('Person')
parent = models.ForeignKey('Person')
relation = models.CharField(max_length=26)
class Meta:
unique_together = ('student', 'parent')
如上所示,Person 模型与自身有两个 m2m 关系:学生和父母。每个人在同一张 Person 表上可能有很多学生,也可能有很多父母。
但是,Django 不允许这样做:
Person: (models.E003) The model has two many-to-many relations through
the intermediate model 'StudentParent'.
我不明白为什么 Django 拒绝这样做,尤其是因为它不使用自定义中间表保存或验证 m2m 字段。另一方面,我只需要使用这些字段来更轻松地检索相关模型。例子:
person_obj.students.all()
Person.objects.filter(parents__in=another_person_queryset)
所以我的问题是,1)在 Django1.11 中有没有办法解决这个问题(通过配置等使这样的 2 m2m 字段成为可能)?2)有没有办法通过其他方式使只读场景发生这种情况?
使用中介模型的代理会欺骗 django 使 1) 发生吗?使用自定义管理器会帮助实现 2)吗?什么是最短、最整洁的路径?
注意:我知道之前有人问过类似的问题,但是这有点不同而且有点老了。