[关闭]
@llplmlyd 2019-04-29T18:35:18.000000Z 字数 1842 阅读 1072

Django自定义Admin管理站点

Python


在admin py文件中进行app注册的时候,在class设置中添加自定义外观选项内容。

  1. fields = ['pub_date', 'question_text'] # 默认时间在后,经过自定义之后时间被前置
  1. fieldsets = [
  2. (None, {'fields': ['question_text']}),
  3. ('Date information', {'fields': ['pub_date']}),
  4. ]

Django在admin站点中,自动地将所有的外键关系展示为一个select框

在创建一个对象管理的界面中实现可以直接添加附加的另一个对象的方法 Admin:

如 question and choice:

  1. from django.contrib import admin
  2. from .models import Choice, Question
  3. # class 部分均是增加的内容;修改继承的类StackedInline可以修改显示的样式
  4. class ChoiceInline(admin.StackedInline):
  5. model = Choice
  6. extra = 3
  7. class QuestionAdmin(admin.ModelAdmin):
  8. fieldsets = [
  9. (None, {'fields': ['question_text']}),
  10. ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
  11. ]
  12. inlines = [ChoiceInline]
  13. # 多一个参数QuestionAdmin
  14. admin.site.register(Question, QuestionAdmin)

展示多列内容 Admin

通常,Django只显示在model中def 了的 str()方法指定的内容。
要同时显示一些别的内容,可以在admin的响应的class类视图使用list_display属性,它是一个由字段组成的元组,其中的每一个字段都会按顺序显示在“change list”页面上,如下代码展示:

  1. class QuestionAdmin(admin.ModelAdmin):
  2. # ...
  3. list_display = ('question_text', 'pub_date', 'was_published_recently')

Model中def后改进输出的样式 Model

如下显示添加的最后三行,将原本的True/False变成小图标

  1. # polls/models.py
  2. class Question(models.Model):
  3. # ...
  4. def was_published_recently(self):
  5. now = timezone.now()
  6. return now - datetime.timedelta(days=1) <= self.pub_date <= now
  7. was_published_recently.admin_order_field = 'pub_date'
  8. was_published_recently.boolean = True
  9. was_published_recently.short_description = 'Published recently?'

对显示结果进行过滤 Admin

如下所示,使用 list_filter 属性:

  1. list_filter = ['pub_date']

搜索功能 Admin

如下所示,使用 search_fields 属性,列表中:

  1. search_fields = ['question_text']

Django在后台使用的都是SQL查询语句的LIKE语法
页面还提供分页功能,默认每页显示100条

定制admin整体界面

定制项目模板

同样使用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在一个模型中只允许有一个自增字段,并且该字段必须为主键!

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注