添加应用建好表后,django的后台管理,需要在admin.py 里进行后台注册
有3种注册方式
# 第一种
from django.contrib import admin
from myproject.myapp.models import Author
class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin)
# 第二种
from django.contrib import admin
from myproject.myapp.models import Author
admin.site.register(Author)
# 第三种
from django.contrib import admin
from myproject.myapp.models import Author
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
pass
控制操作栏在页面上的显示位置。默认情况下,管理员更改列表在页面()的顶部显示操作。actions_on_top = True; actions_on_bottom = False
ModelAdmin.actions_selection_counte
控制是否在操作下拉菜单旁边显示选择计数器。默认情况下,管理员更改列表将显示它()。actions_selection_counter = True
ModelAdmin.date_hierarchy
设置date_hierarchy为 模型中的DateField或的名称,DateTimeField更改列表页面将包括该字段的基于日期的向下钻取导航。
# 此属性将覆盖记录字段为空(None,空字符串等)的默认显示值。默认值为-(破折号)。
from django.contrib import admin
class AuthorAdmin(admin.ModelAdmin):
empty_value_display = '-empty-'
# 覆盖empty_value_display所有管理页面 AdminSite.empty_value_display,或覆盖类似这样的特定字段
from django.contrib import admin
class AuthorAdmin(admin.ModelAdmin):
fields = ('name', 'title', 'view_birth_date')
def view_birth_date(self, obj):
return obj.birth_date
view_birth_date.empty_value_display = '???'
从表单中排除的字段名称列表
from django.contrib import admin
class AuthorAdmin(admin.ModelAdmin):
fields = ('name', 'title')
class AuthorAdmin(admin.ModelAdmin):
exclude = ('birth_date',)
使用该fields选项可以在“添加”和“更改”页面上的表单中进行简单的布局更改
class FlatPageAdmin(admin.ModelAdmin):
fields = ('url', 'title', 'content')
url’, ‘title’ 在一行显示
class FlatPageAdmin(admin.ModelAdmin):
fields = (('url', 'title'), 'content')
设置fieldsets以控制管理员“添加”和“更改”页面的布局。
fieldsets是一个二元组列表,其中每个二元组在管理表单页面上代表一个 。(A 是表格的“部分”。)
两元组的格式为,其中 是代表字段集标题的字符串,并且是有关字段集的信息字典,包括要在其中显示的字段列表。(name, field_options)namefield_options
from django.contrib import admin
class FlatPageAdmin(admin.ModelAdmin):
fieldsets = (
(None, {
'fields': ('url', 'title', 'content', 'sites')
}),
('Advanced options', {
'classes': ('collapse',),
'fields': ('registration_required', 'template_name'),
}),
)
设置list_filter以激活管理员更改列表页面右侧栏中的过滤器
list_filter 应为元素的列表或元组,其中每个元素应为以下类型之一:
字段名称,其中指定的字段应该是一个 BooleanField,CharField,DateField,DateTimeField, IntegerField,ForeignKey或ManyToManyField,例如:
class PersonAdmin(admin.ModelAdmin):
list_filter = ('is_staff', 'company')
也可以使用__查找来跨越关系,例如:
class PersonAdmin(admin.UserAdmin):
list_filter = ('company__name',)
ModelAdmin.list_max_show_all
设置list_max_show_all以控制在“显示全部”管理员更改列表页面上可以显示多少个项目。仅当总结果计数小于或等于此设置时,管理员才会在更改列表上显示“显示全部”链接。默认情况下,此设置为200。
ModelAdmin.list_per_page
设置list_per_page为控制在每个分页的管理员更改列表页面上显示多少个项目。默认情况下,此设置为100。
ModelAdmin.list_select_related
设置list_select_related为告诉Django select_related()在管理更改列表页面上检索对象列表时使用。这样可以为您节省大量数据库查询。
该值应该是布尔值,列表或元组。默认值为 False。
当value为时True,select_related()将始终被调用。当value设置False为时,Django将查看list_display并调用( select_related()如果ForeignKey存在)。
如果您需要更细粒度的控制,请使用元组(或列表)作为的值 list_select_related。空元组将完全阻止Django调用 select_related。任何其他元组将直接select_related作为参数传递给 。例如:
class ArticleAdmin(admin.ModelAdmin):
list_select_related = ('author', 'category')
设置ordering以指定应如何在Django管理视图中对对象列表进行排序。这应该是与模型ordering参数格式相同的列表或元组。
ModelAdmin.paginator
用于分页的分页器类。默认情况下, django.core.paginator.Paginator使用。如果自定义分页器类的构造函数接口不同 django.core.paginator.Paginator,您还需要提供一个实现ModelAdmin.get_paginator()。
ModelAdmin.prepopulated_fields
设置prepopulated_fields为字典,将字段名称映射到应预填充的字段:
class ArticleAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
prepopulated_fields不接受DateTimeField,ForeignKey, OneToOneField,和ManyToManyField领域。
ModelAdmin.preserve_filters
现在,管理员可以在创建,编辑或删除对象后在列表视图上保留过滤器。您可以通过将此属性设置为来恢复清除过滤器的先前行为False。
ModelAdmin.radio_fields
默认情况下,Django的管理员将选择框界面()用于ForeignKey已choices设置或已设置的字段。如果中存在字段radio_fields,则Django将改用单选按钮界面。假设group是ForeignKey对Person模型:
class PersonAdmin(admin.ModelAdmin):
radio_fields = {"group": admin.VERTICAL}
ModelAdmin.save_as
设置save_as为在管理员更改表单上启用“另存为”功能。
通常,对象具有三个保存选项:“保存”,“保存并继续编辑”和“保存并添加另一个”。如果save_as为True,则将“保存并添加另一个”替换为“另存为新”按钮,该按钮可创建新对象(具有新ID)而不是更新现有对象。
默认情况下,save_as设置为False。
ModelAdmin.save_as_continue
当save_as=True,节省了新对象后的默认重定向是该对象的更改视图。如果设置了 save_as_continue=False,重定向将转到更改列表视图。
默认情况下,save_as_continue设置为True。
ModelAdmin.save_on_top
设置save_on_top为在您的管理员更改表单顶部添加保存按钮。
通常,保存按钮仅出现在表单底部。如果设置save_on_top,则按钮将同时显示在顶部和底部。
默认情况下,save_on_top设置为False。
ModelAdmin.search_fields
设置search_fields为在管理员更改列表页面上启用搜索框。应该将其设置为一个字段名称列表,只要有人在该文本框中提交搜索查询,就将对其进行搜索。
这些字段应该是某种文本字段,例如CharField或 TextField。您还可以使用ForeignKey或 ManyToManyField使用查询API“跟随”表示法执行相关的查询:
search_fields = ['foreign_key__related_fieldname']
例如,如果您有一个包含作者的博客条目,则以下定义将允许按作者的电子邮件地址搜索博客条目:
search_fields = ['user__email']
ModelAdmin样式脚本定义
有时候您想在添加/更改视图中添加一些CSS和/或JavaScript。这可以通过Media在您的上使用内部类来完成ModelAdmin
class ArticleAdmin(admin.ModelAdmin):
class Media:
css = {
"all": ("my_styles.css",)
}
js = ("my_code.js",)
类InlineModelAdmin¶
类TabularInline¶
类StackedInline¶
管理界面可以在与父模型相同的页面上编辑模型。这些称为内联。假设您有以下两个模型:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
您可以在作者页面上编辑作者创作的书籍。通过在中指定内联,可以将内联添加到模型中ModelAdmin.inlines:
from django.contrib import admin
class BookInline(admin.TabularInline):
model = Book
class AuthorAdmin(admin.ModelAdmin):
inlines = [
BookInline,
]