本篇文展不造轮子,原因看上篇文展
admin初步了解
admin进阶了解
Django进阶(1): admin后台高级玩法(多图)_大江狗的博客-CSDN博客
这个作者讲的很好,共三篇文章
admin知识点总结
初次使用
创建管理员帐号密码
首先,下面命令创建一个管理员帐号
python manage.py createsuperuser
输入用户名:
Username: admin
输入邮箱地址:
Email address:vip@django.cn
输入密码:
Password: **********
Password (again): *********
注册admin
使用装饰器,可注册多个模型(推荐)
from django.contrib import admin
from .models import Author
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
pass
直接注册
from django.contrib import admin
from myproject.myapp.models import Author
class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin)
功能介绍
站点动作
编写动作函数
首先,我们需要编写一个在管理员触发操作时调用的函数。动作函数只是接受三个参数的常规函数:
- 目前的ModelAdmin编写动作函数
- 一个HttpRequest代表当前请求,
- QuerySet包含用户选择的对象集。
def make_published(modeladmin, request, queryset):
queryset.update(status='p')
为了获得最佳性能,我们使用了查询集的更新方法。其他类型的操作可能需要单独处理每个对象;在这些情况下,我们只需遍历查询集:
for obj in queryset:
do_something_with(obj)
完整案例
from django.contrib import admin
from myapp.models import Article
def make_published(modeladmin, request, queryset):
queryset.update(status='p')
make_published.short_description = "Mark selected stories as published" #动作名称
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'status']
ordering = ['title']
actions = [make_published]
admin.site.register(Article, ArticleAdmin)
动作作为ModelAdmin方法
上面的示例显示了定义为简单函数的操作。这很好,但从代码设计的角度来看并不完美:由于动作与对象紧密耦合,因此将动作与对象本身挂钩是有意义的。
class ArticleAdmin(admin.ModelAdmin):
...
actions = ['make_published']
def make_published(self, request, queryset):
queryset.update(status='p')
make_published.short_description = "Mark selected stories as published"
令上出modeladmin参数改为self即可
常用API
from django.contrib import admin
from .models import Article
from django.utils.html import format_html
class ArticleAdmin(admin.ModelAdmin):
# Custom admin list view
list_display = ('title', 'author', 'status', 'create_date', )
# list_display_links = ('title', ) # default
# sortable_by # a sub set of list_display. All fields are sortable by default.
'''define which fields are editable on list view'''
list_editable = ('status', )
'''10 items per page'''
list_per_page = 5
'''Max 200 when clicking show all'''
list_max_show_all = 200 #default
'''Calling select related objects to reduce SQL queries'''
list_select_related = ('author', )
'''Render a search box at top. ^, =, @, None=icontains'''
search_fields = ['title']
'''Render date options at top. do not accept tuple'''
date_hierarchy = 'create_date'
'''Replacement value for empty field'''
empty_value_display = 'NA'
'''filter options'''
list_filter = ('status', 'author__is_superuser', )
admin.site.register(Article, ArticleAdmin)
此时登录django后台访问Article模型你将看到如下基础显示效果。我们将从这里开始展示django自带admin后台更高级的用法。
(图片出自大江狗文章)