小编典典

获取所有相关的Django模型对象

python

如何获得所有具有ForeignKey指向对象的模型对象的列表?(有点像Django管理员中DELETE CASCADE之前的Delete确认页面)。

我试图提出一种合并数据库中重复对象的通用方法。基本上,我希望所有具有ForeignKeys指向对象“ B”的对象都被更新为指向对象“
A”,这样我就可以删除“ B”而不会丢失任何重要内容。

谢谢你的帮助!


阅读 176

收藏
2020-12-20

共1个答案

小编典典

Django <= 1.7

这为您提供了所有相关对象的属性名称:

links = [rel.get_accessor_name() for rel in a._meta.get_all_related_objects()]

然后,您可以使用类似这样的方法来获取所有相关对象:

for link in links:
    objects = getattr(a, link).all()
    for object in objects:
        # do something with related object instance

我花了一段时间试图弄清楚这一点,以便可以在自己的模型中实现一种“观察者模式”。希望对您有所帮助。

Django 1.8以上

使用_meta.get_fields()https
:
//docs.djangoproject.com/en/1.10/ref/models/meta/#django.db.models.options.Options.get_fields(另请参见_get_fields()源中的反向)

2020-12-20