Nói my_instance
là của mô hình MyModel
.
Tôi đang tìm kiếm một cách tốt để làm:django: cách thực hành tốt nhất để lấy mô hình từ một phiên bản của mô hình đó
my_model = get_model_for_instance(my_instance)
tôi đã không tìm thấy bất kỳ cách nào thực sự trực tiếp để làm điều này. Cho đến nay tôi đã đưa ra điều này:
from django.db.models import get_model
my_model = get_model(my_instance._meta.app_label, my_instance.__class__.__name__)
Điều này có được chấp nhận không? Nó thậm chí là một cách chắc chắn, cách thực hành tốt nhất để làm điều đó?
Ngoài ra còn có _meta.object_name
có vẻ như cung cấp giống như __class__.__name__
. Phải không? Tốt hơn hay tệ hơn? Nếu vậy, tại sao?
Ngoài ra, làm cách nào để biết tôi đang nhận đúng mô hình nếu nhãn ứng dụng xảy ra nhiều lần trong phạm vi dự án, ví dụ: 'auth' từ 'django.contrib.auth' và cho phép đó cũng có 'myproject.auth'?
Trường hợp này có khiến get_model
không đáng tin cậy không?
Cảm ơn mọi gợi ý/con trỏ và chia sẻ kinh nghiệm!
'__class__' tuyệt đối ** phải ** là lớp cho cá thể. Không có sự mơ hồ có thể xảy ra. Đó là cách Python hoạt động. Bạn hỏi gì? –
Vâng, tôi có một số giới hạn của sự hiểu biết ở đây. Với tôi, sự mơ hồ là có thể có nhiều hơn một nhãn hiệu ứng dụng/tên lớp kết hợp, sống trong các mô-đun khác nhau. Tuy nhiên, get_model không nhận được mô đun như đầu vào. Vì vậy, mô hình nó sẽ cung cấp? Điều khác là tôi không hiểu Object_name là gì, vì nó trả về cùng chuỗi với '__class __.__ name__', và có bao nhiêu người chọn một trong hai cái đó để sử dụng trong' get_model' hoặc ở nơi khác. Cảm ơn! – Geradeausanwalt