class A(models.Model):
pass
class B(models.Model):
parents = models.ManyToManyField(A, related_name='children')
>>> A._meta.get_all_field_names()
['children', u'id']
>>> B._meta.get_all_field_names()
[u'id', 'parents']
Run Code Online (Sandbox Code Playgroud)
我能得到孩子们的集合,并与模型实例的父母a.children.all()和b.parents.all()
class FK(models.Model):
parent = models.ForeignKey('self', related_name='child')
>>> FK._meta.get_all_field_names()
['child', u'id', 'parent']
Run Code Online (Sandbox Code Playgroud)
的任何实例FK现在将能够同时获得其母公司和其子带fk.parent和fk.child
class M2M(models.Model):
parents = models.ManyToManyField('self', related_name='children')
>>> M2M._meta.get_all_field_names()
[u'id', 'parents']
Run Code Online (Sandbox Code Playgroud)
人们期望的是,像我可以访问a.children和fk.child,我也能够访问m2m.children.情况似乎并非如此.
我如何访问m2m.children?
我正在使用Django 1.6.5.
正如Daniel Roseman的回答所说,设置symmetrical=False解决了问题.在Django票中,它被解释为:
在父/子的情况下,关系不是对称的 - 如果A是B的孩子,则不遵循A是B的父亲.
使用时symmetrical=False,创建的反向关系related_name就像在外键情况下一样创建: …