如何获得具有指向某个对象的ForeignKey的所有模型对象的列表?(类似于delete CASCADE之前Django管理中的删除确认页面)。
我正在尝试想出一种通用的方法来合并数据库中的重复对象。基本上,我希望所有具有指向对象"B“的ForeignKeys指针的对象都被更新为指向对象"A”,这样我就可以删除"B“而不会丢失任何重要的东西。
谢谢你的帮忙!
发布于 2010-02-23 07:23:06
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()
源代码中的reverse )
发布于 2013-10-16 03:50:57
@digitalPBK很接近...以下可能是您使用Django的内置内容寻找的内容,这些内容在Django admin中用于在删除过程中显示相关对象
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管理员显示的内容-要删除的相关对象。
发布于 2010-02-10 10:42:06
试一试。
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]
https://stackoverflow.com/questions/2233883
复制相似问题