2010-06-02 30 views
11

Làm cách nào để kiểm tra xem modeladmin có tồn tại cho một mô hình cụ thể không?django: kiểm tra modeladmin cho một kiểu nhất định

modeladmins được tạo bằng cách đăng ký một mô hình với đối tượng admin.site. làm thế nào có thể kiểm tra một đối tượng trang web để xem những mô hình đã được đăng ký, và với admin_class nào?

Trả lời

14

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> 
+0

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ó! –

+0

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

+0

@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ó –

Các vấn đề liên quan