官方文档#7-定制管理台

1. 管理台表单布局(1)

# 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)
官方文档#7-定制管理台_第1张图片
image

2. 管理台表单布局(2)

# polls/admin.py
from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    # 将表单内容分成两块(第一块为命名,第二块命名为'Date information')
    # 每一块保存在一个tuple中
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]

admin.site.register(Question, QuestionAdmin)
官方文档#7-定制管理台_第2张图片
image

3. 添加关联对象

  • 如果在polls/admin.py中直接注册Choice数据模型,那么该模型在管理台中将以独立的形式显示。使用这种方式对具体Question添加Choice不是很方便。
  • 使用内联形式
# polls/admin.py
from django.contrib import admin

from .models import Choice, Question


# 除了StackedInline这种内联模式外,Django还提供一种TabularInline的内联模式(每个Choice选项将展示在一行)
class ChoiceInline(admin.StackedInline):
    model = Choice
    # 显示3个额外的Choice表单
    extra = 3


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    # 告诉Django该表单有一个内联表单
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)
官方文档#7-定制管理台_第3张图片
StackedInline

官方文档#7-定制管理台_第4张图片
TabularInline

4. 定制管理台的Change List

# polls/admin.py
class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question_text', 'pub_date', 'was_published_recently')
官方文档#7-定制管理台_第5张图片
change list

你可能感兴趣的:(官方文档#7-定制管理台)