我正在编写一个 shell 实用程序,它允许我遍历关系,这样我就不需要返回到我的模型并查看表是如何相关的。我正在使用 _meta为了获得所有这些信息。
查看以下示例模型:
class Foo:
...
class Bar:
foo = models.ManyToManyField(Foo)
这就是我使用 _meta 时发生的情况查找 m2m 字段:
In [33]: Bar._meta.many_to_many
Out [33]: [<django.db.models.fields.related.ManyToManyField: foos>]
In [34]: Foo._meta.many_to_many
Out [34]: []
有什么东西会返回 [<django.db.models.fields.related.ManyToManyField: bars>]通过询问与 Foo 的 m2m 关系模型?
请您参考如下方法:
是的。以下将返回 RelatedObject 的列表用于模型,它与多对多字段相反。
related_objects = Foo._meta.get_all_related_many_to_many_objects()
可以使用 related_object.field 访问该字段.请注意,这仍然是一个来自 Bar 的字段到 Foo , 它与 Bar._meta.many_to_many 返回的字段完全相同.
要获取指向模型或来自模型的所有多对多字段,您可以这样做:
many_to_many = (Foo._meta.many_to_many
+ [r.field for r in Foo._meta.get_all_related_many_to_many_objects()])
