Bir kullanıcının başka örnekler tarafından atıfta bulunulan bir nesne örneğini silmesini önleme veya uyarmak istiyorum. Bunu yapmanın iyi bir yolu var mı?Django: Modellerimin hangi modele başvurduğunu nasıl bulabilirim?
Bir yol, başvuruyu içeren modellerin bir listesini almak ve ardından geriye doğru arama yapmayı deneyin. Bu modellerin listesini almanın bir yolu var mı? Yoksa daha iyi bir yolu var mı?
kolektör öneri araştırırken
, ben bazı ilgili bilgiler buldum ve yabancı anahtar olarak referent sahip sınıflar bulur şunları yazdı: öneri dayanarakdef 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__
toplamak kodu kullanmak:
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
Bu soruyu son çözümünüzle güncellediğiniz için teşekkür ederiz. Harika iş. – Spike
'get_model',' (app, cl) 'yi alırken' find_related' '' (cl, app) 'yi aldınız. Bu gerçekten kafa karıştırıcı! Ayrıca, eğer başka biri bunu okuyorsa, 'cl' ve 'app' dizeleridir - nesneleri geçmeyin! – Casebash