我想警告或阻止用戶刪除其他實例引用的對象實例。有沒有一個很好的方法來做到這一點?Django:我如何才能找到哪個模型引用模型
一種方法是獲取包含指示對象的模型列表,然後嘗試對它們進行反向查找。有沒有辦法獲得這個模型列表?或者,還有更好的方法?
當調查收集的建議,我發現了一些相關的信息,並寫了發現其中有所指的外鍵的類如下:
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__
基礎上建議使用的代碼中收集:
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
感謝您使用最終解決方案更新此問題。優秀作品。 – Spike
你有'find_related'採取'(cl,app)',而'get_model'採取'(app,cl)'。這真是令人困惑!另外,如果其他人正在閱讀,'cl'和'app'是字符串 - 不要傳遞對象! – Casebash