gpt4 book ai didi

Django:如何找到我的哪些模型引用了模型

转载 作者:行者123 更新时间:2023-12-04 02:25:27 26 4
gpt4 key购买 nike

我想警告或阻止用户删除其他实例引用的对象实例。有没有很好的方法来做到这一点?

一种方法是获取包含所指对象的模型列表,然后尝试对它们进行反向查找。有没有办法获得该模型列表?或者,还有更好的方法?

在调查收集器建议时,我找到了一些相关信息并编写了以下内容,以查找将所指对象作为外键的类:

def find_related(cl, app):
"""Find all classes which are related to the class cl (in app) by
having it as a foreign key."""

from django.db import models

all_models = models.get_models()
ci_model = models.get_model(app, cl)
for a_model in all_models:
for f in a_model._meta.fields:
if isinstance(f, ForeignKey) and (f.rel.to == ci_model):
print a_model.__name__

基于在collect中使用代码的建议:
def find_related(instance):
"""Find all objects which are related to instance."""

for related in instance._meta.get_all_related_objects():
acc_name = related.get_accessor_name()
referers = getattr(instance, acc_name).all()
if referers:
print related

最佳答案

Django 有个东西叫 Collector类(class)。 Django 在执行模型删除时使用它。它所做的似乎正是您想要的。调用 collect()它在模型图中找到对对象的所有引用。此外,它还提供了一种删除所有找到的对象的方法,使用 delete()称呼。

也就是说我自己从未使用过这个类,我只知道它存在。 API 有点复杂,但如果您愿意深入研究 Django 的内部结构,它可能会为您节省大量编码。

关于Django:如何找到我的哪些模型引用了模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7539278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com