Tôi muốn cảnh báo hoặc ngăn chặn người dùng xóa một cá thể đối tượng được gọi bởi các phiên bản khác. Có cách nào tốt đẹp để làm điều này?Django: Làm thế nào tôi có thể tìm thấy mô hình nào của tôi đề cập đến một mô hình
Một cách để có được danh sách các mô hình bao gồm tham chiếu và sau đó thử tra cứu ngược lại trên chúng. Có cách nào để có được danh sách các mô hình đó không? đây có phải là cách tốt hơn không?
Trong khi điều tra đề nghị thu, tôi tìm thấy một số thông tin liên quan và viết những điều sau đây mà tìm thấy các lớp học mà có referent như một chìa khóa nước ngoài:
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__
Dựa trên gợi ý để sử dụng các mã trong thu thập:
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
Cảm ơn bạn đã cập nhật câu hỏi này với giải pháp cuối cùng của mình. Công việc tuyệt vời. – Spike
Bạn có 'find_related' lấy' (cl, app) ', trong khi' get_model' nhận '(app, cl)'. Nó thực sự khó hiểu! Ngoài ra, nếu bất cứ ai khác đang đọc này, 'cl' và' app' là các chuỗi - không vượt qua các đối tượng! – Casebash