前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Django学习笔记 1.7 自定义 admin 站点

Django学习笔记 1.7 自定义 admin 站点

作者头像
twowinter
发布2020-04-17 12:13:34
发布2020-04-17 12:13:34
1K00
代码可运行
举报
文章被收录于专栏:twowintertwowinter
运行总次数:0
代码可运行

作者: iotisan

前言

这节笔记将更加深入地处理 admin 站点,包括修改表单更加直观呈现模型数据,快速添加关联对象,以及后台涉及的列表展示、过滤器、搜索框等操作。

1 自定义后台表单

polls/admin.py 通过 admin.site.register(Question) 注册 Question 模型,Django 能够构建一个默认的表单用于展示。通常来说,你期望能自定义表单的外观和工作方式。你可以在注册模型时将这些设置告诉 Django。

当我们的拥有数十个字段的表单,我们肯定会期望将表单分为几个字段集,这样会更清晰一点:

代码语言:javascript
代码运行次数:0
运行
复制
from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]

admin.site.register(Question, QuestionAdmin)

2 添加关联的对象

2.1 传统老办法

仿照我们向后台注册 Question 一样注册 Choice 。

代码语言:javascript
代码运行次数:0
运行
复制
from django.contrib import admin

from .models import Choice, Question
# ...
admin.site.register(Choice)

2.2 高效方案

代码语言:javascript
代码运行次数:0
运行
复制
from django.contrib import admin

from .models import Choice, Question


class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 3


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)

这会告诉 Django:“Choice 对象要在 Question 后台页面编辑。默认提供 3 个足够的选项字段。”

3 自定义后台更改列表

3.1 显示列表

默认情况下,Django 显示每个对象的 str() 返回的值。但有时如果我们能够显示单个字段,它会更有帮助。为此,使用 list_display 后台选项,它是一个包含要显示的字段名的元组,在更改列表页中以列的形式展示这个对象:

代码语言:javascript
代码运行次数:0
运行
复制
class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question_text', 'pub_date')

3.2 过滤器

再次编辑文件 polls/admin.py,优化 Question 变更页:过滤器,使用 list_filter。将以下代码添加至 QuestionAdmin:

代码语言:javascript
代码运行次数:0
运行
复制
list_filter = ['pub_date']

这样做添加了一个“过滤器”侧边栏,允许人们以 pub_date 字段来过滤列表:

3.3 搜索框

让我们再扩充些功能:

search_fields = [‘question_text’]

在列表的顶部增加一个搜索框。当输入待搜项时,Django 将搜索 question_text 字段。你可以使用任意多的字段——由于后台使用 LIKE 来查询数据,将待搜索的字段数限制为一个不会出问题大小,会便于数据库进行查询操作。

END


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1 自定义后台表单
  • 2 添加关联的对象
    • 2.1 传统老办法
    • 2.2 高效方案
  • 3 自定义后台更改列表
    • 3.1 显示列表
    • 3.2 过滤器
    • 3.3 搜索框
  • END
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档