@llplmlyd
2019-04-29T18:35:18.000000Z
字数 1842
阅读 1072
Python
fields = ['pub_date', 'question_text'] # 默认时间在后,经过自定义之后时间被前置
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date']}),
]
Django在admin站点中,自动地将所有的外键关系展示为一个select框
如 question and choice:
from django.contrib import admin
from .models import Choice, Question
# class 部分均是增加的内容;修改继承的类StackedInline可以修改显示的样式
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
# 多一个参数QuestionAdmin
admin.site.register(Question, QuestionAdmin)
通常,Django只显示在model中def 了的 str()方法指定的内容。
要同时显示一些别的内容,可以在admin的响应的class类视图使用list_display属性,它是一个由字段组成的元组,其中的每一个字段都会按顺序显示在“change list”页面上,如下代码展示:
class QuestionAdmin(admin.ModelAdmin):
# ...
list_display = ('question_text', 'pub_date', 'was_published_recently')
如下显示添加的最后三行,将原本的True/False变成小图标
# polls/models.py
class Question(models.Model):
# ...
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
如下所示,使用 list_filter 属性:
list_filter = ['pub_date']
如下所示,使用 search_fields 属性,列表中:
search_fields = ['question_text']
Django在后台使用的都是SQL查询语句的LIKE语法
页面还提供分页功能,默认每页显示100条
同样使用Templates的功能,检查:Templates位于与manage.py同等级的目录
1. 将 \Lib\site-packages\django\contrib\admin\templates\admin 目录下的base_site.html拷贝到templates\admin中
2. 将{{ site_header|default:_(’Django administration’) }} 都替换为自定义的标题
!所有Django默认的admin模板都可以被重写,类似刚才重写base_site.html模板的方法一样,从源代码目录将HTML文件拷贝至你自定义的目录内,然后修改文件。
Django在一个模型中只允许有一个自增字段,并且该字段必须为主键!