Skip to main content
 首页 » 编程设计

python之Django _meta 多对多

2025年05月04日22qq78292959

我正在编写一个 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()])