【Django第一步】第七部分:自定义管理站点

【Django第一步】第七部分:自定义管理站点

@[Django, 翻译, python]

我们将重新自定义管理站点

自定义管理表单

通过注册Question的模型admin.site.register(Question),Django可以生成一个默认的管理表单。通常你希望可以自己定制它的样式。你可以在生成表单的时候告诉Django需要的选项。

现在,我们更改polls/admin.py如下:

from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']

admin.site.register(Question, QuestionAdmin)

您将遵循此模式 - 创建模型管理员类,然后将其作为第二个参数传递给admin.site.register()

上面的这个特殊变化使“出版日期”出现在“问题”字段之前:
这里写图片描述

这只有两个feild,并不令人印象深刻,但对于包含数十个feild的管理员表单,选择直观的样式是一个重要的环节

你可能会想将表单分成几个字段

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)

每个元组的第一个元素 fieldsets是字段集的标题。以下是我们的表单现在的样子:
这里写图片描述

添加相关对象

现在我们已经有了我们的管理员界面,但是一个Question对应多可Choice,并且管理页面并不显示Choice

有两种方法可以解决这个问题。

我们可以像注册Question一样注册Choice

from django.contrib import admin

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

这里写图片描述

在这种形式下,“Question”字段是包含数据库中每个问题的选择框。Django知道a ForeignKey应该在管理员中表现为一个<select>框。在我们的案例中,目前只有一个问题存在。

实际上,这是Choice向系统添加对象的低效方式。如果您可以在创建Question对象时直接添加一堆Choices,那会更好 。

from django.contrib import admin

from .models import Choice, Question


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]

admin.site.register(Question, QuestionAdmin)

这告诉Django,Choice在Question管理界面上进行编辑。默认情况下为3个选择
这里写图片描述

自定义管理员更改列表

默认情况下,Django显示__str__,但是有的时候,我们显示字段会更好。要做到这一点,我们需要为admin加上list_display项

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

这里写图片描述

您可以单击列标题按照这些值进行排序

我们也可以再改进,加上

list_filter = ['pub_date']

这里写图片描述
还可以加上搜索功能

search_fields = ['question_text']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值