Câu hỏi thú vị, điều này đã khiến tôi phải đào một chút.
Khi lớp quản trị đã được đăng ký, chúng được lưu trữ trong một thuộc tính của đối tượng site
được gọi - không đáng ngạc nhiên - _registry
. Đây là từ điển của các lớp mô hình cho các lớp modeladmin - lưu ý cả khóa và giá trị là các lớp, không phải tên.
Vì vậy, nếu bạn có một admin.py như thế này:
from django.contrib import admin
from myapp.models import MyModel
class MyModelAdmin(admin.ModelAdmin):
list_display = ('field1', 'field2')
admin.site.register(MyModel, MyModelAdmin)
sau đó một lần mà đã thực sự được nhập khẩu - thường là bằng dòng admin.autodiscover()
trong urls.py - admin.site._registry
sẽ chứa một cái gì đó như thế này:
{<class 'myapp.models.MyModel'>:
<django.contrib.admin.options.ModelAdmin object at 0x10210ba50>}
và bạn sẽ nhận được các đối tượng ModelAdmin cho MyModel
bằng cách sử dụng mô hình chính nó như là chìa khóa:
>>> admin.site._registry[MyModel]
<django.contrib.admin.options.ModelAdmin object at 0x10210ba50>
Nguồn
2010-06-02 08:03:28
hmmm ... đây cũng là lần thử đầu tiên của tôi, nhưng không có gì trong _registry .. có lẽ vì tôi đã kiểm tra từ managed.py shell và tự động phát hiện đã không được gọi. Điều này có thể là nó! –
cảm ơn! hoạt động hoàn hảo trong ** Django 1.4 **, nhưng không phải là có một phương pháp để truy cập trực tiếp ModelAdmin từ bên trong Model? nó sẽ đẹp hơn phương pháp của tôi: 'admin.site._registry [obj .__ class __]' :) – caesarsol
@caesarsol mô hình của bạn không biết gì về quản trị vì MVC - Django không thực sự là MVC, nhưng gần với nó –