一尘不染

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

django

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

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

谢谢你的帮助!


阅读 439

收藏
2020-03-27

共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-03-27