django admin用法

django admin用法

基本使用

from django.contrib import admin
from .models import *


# Register your models here.

@admin.register(Question)  # Question是表
class QuestionAdmin(admin.ModelAdmin):
    fields = [
        # 'question_text', 放在pub_date的上面那么在展示的时候就会在它的上面,按列表索引顺序展示
        'pub_date',
        'question_text',
    ]

Fields have been reordered

给几个字段加标题

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

fieldsets 元组中的第一个元素是字段集的标题。以下是我们的表单现在的样子:

Form has fieldsets now

添加关联的对象

写一个继承TabularInline的类,里面的model写被关联的model,然后在inlines里加入该类就可以了

class ChoiceLine(admin.TabularInline):
    model = Choice  # 指定关联表
    extra = 3  # 一次可以添加关联对象的数量

@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields': ['pub_date']}),
        ('question_info', {'fields': ['question_text']})
    ]
    inlines = [ChoiceLine]  # 在这里加入新写的类

Add question page now has more compact choices

如果要在展示的时候区分开来的话可以继承StackedInline类,下面是效果

class ChoiceLine(admin.StackedInline):
    model = Choice  # 指定关联表
    extra = 3  # 一次可以添加关联对象的数量

@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields': ['pub_date']}),
        ('question_info', {'fields': ['question_text']})
    ]
    inlines = [ChoiceLine]  # 在这里加入新写的类

Add question page now has choices on it

自定义后台展示列表字段

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

class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question_text', 'pub_date')

另外,让我们把 model中定义的 was_published_recently() 方法也加上:

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

现在修改投票的列表页看起来像这样:

Polls change list page, updated

你可以点击列标题来对这些行进行排序——除了 was_published_recently 这个列,因为没有实现排序方法。顺便看下这个列的标题 was_published_recently,默认就是方法名(用空格替换下划线),该列的每行都以字符串形式展示出处。

过滤功能

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

list_filter = ['pub_date']

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

Polls change list page, updated

展示的过滤器类型取决你你要过滤的字段的类型。因为 pub_date 是类 DateTimeField,Django 知道要提供哪个过滤器:“任意时间”,“今天”,“过去7天”,“这个月”和“今年”。

搜索功能

search_fields = ['question_text']

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

image

posted @ 2022-08-16 23:26  zong涵  阅读(82)  评论(0编辑  收藏  举报