Admin related in Django

Category: /knowledge /django
Tags: django

为什么会有admin

Django最早是将model和admin放在一起的. 优点是简洁, 缺点是当然是代码绑定在一起了. 没想到开源以后, admin受到大家热烈欢迎, 人们纷纷给admin提出各种期望. 这时候问题就来了. 不同的人对admin的要求不一样. 如果你想自定义admin, 势必要改造整个类定义, 这么做就不够DRY. 所以就出现了目前的方法, 多写点代码, 你就能可着劲地造了.

HowTo

admin.py ———- 先声明要管理的model, 写一个python文件起名叫”admin.py”

from models import News
from django.contrib import admin

还要定义admin class

class NewsAdmin(admin.ModelAdmin):
    list_display=('title', 'publish_at', 'expire_at', 'is_published')
    list_filter =('title', 'publish_at', 'expire_at', 'is_published')
    search_fields =('title', 'publish_at', 'expire_at', 'is_published')

    # user custom form
    form=SomeModelForm
    inlines=[SomeOhterModelInline]

最后还要注册

admin.site.register(News, NewsAdmin)

settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.admin',
    )

urls.py

from django.conf.urls.defaults import *
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    )

如果要对同一个model实现不同的admin功能, 例如给不同用户看不同的数据和界面, 可以注册不同的admin.py, 如:

# urls.py
from django.conf.urls.defaults import *
from myproject.admin import basic_site, advanced_site

urlpatterns = patterns('',
    (r'^basic-admin/', include(basic_site.urls)),
    (r'^advanced-admin/', include(advanced_site.urls)),
)

template

这个可用于在public view里加上进入admin的链接.

{ % url admin:app_mode_[add|change|delete] object_pk % }

Resources

讨论

提示

  • 如果看不到讨论部分, 请暂时关掉adblock in Firefox/Chrome
  • 本网站使用Javascript实现评论功能, 此处外链对提高您的网站PR没有帮助. (潜台词: 请不要灌水, 谢谢)