首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取所有相关的Django模型对象

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

Stack Overflow用户
提问于 2010-02-10 09:46:13
回答 7查看 51.6K关注 0票数 94

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

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

谢谢你的帮忙!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-02-23 07:23:06

Django <= 1.7

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

代码语言:javascript
复制
links = [rel.get_accessor_name() for rel in a._meta.get_all_related_objects()]

然后,您可以使用类似以下内容来获取所有相关对象:

代码语言:javascript
复制
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()源代码中的reverse )

票数 89
EN

Stack Overflow用户

发布于 2013-10-16 03:50:57

@digitalPBK很接近...以下可能是您使用Django的内置内容寻找的内容,这些内容在Django admin中用于在删除过程中显示相关对象

代码语言:javascript
复制
from django.contrib.admin.utils import NestedObjects
collector = NestedObjects(using="default") #database name
collector.collect([objective]) #list of objects. single one won't do
print(collector.data)

这允许您创建Django管理员显示的内容-要删除的相关对象。

票数 24
EN

Stack Overflow用户

发布于 2010-02-10 10:42:06

试一试。

代码语言:javascript
复制
class A(models.Model):
    def get_foreign_fields(self):
      return [getattr(self, f.name) for f in self._meta.fields if type(f) == models.fields.related.ForeignKey]
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2233883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档