网站开发专题 week5 自订管理介面

接续前面 week4 的部分,首先建立环境并使用 week5 资料夹,并且启动虚拟环境

前置准备

cd C:\django_projects
mkdir week5
cd week5
python -m venv env
.\env\Scripts\activate.bat

下载并将 week4 的成果放到 week5 目录底下,点我下载

接着安装 django

pip install django

启动 django 伺服器并且测试功能是否正常,帐密为

  • 帐号: admin
  • 密码: 123456
cd mysite
python manage.py runserver

http://127.0.0.1:8000/admin/

登入成功

使用 Ctrl + C 关闭启动的伺服器

自定义管理介面

开启 VSCODE

code .

原本的预设介面是日期在下面,现在要把它更改为日期在上面

开启 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)

现在呈现顺序就会变成日期在下面

如果觉得这样还不够直觉的话,我们可以把它分群组

开启 polls/admin.py ,贴上以下的程式码

from django.contrib import admin

from .models import Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        ('问  题', {'fields': ['question_text']}),
        ('日期资讯', {'fields': ['pub_date']}),
    ]

admin.site.register(Question, QuestionAdmin)
是不是变得更清楚了?

加入选项

开启 polls/admin.py ,贴上以下的程式码

from django.contrib import admin

from .models import Choice, Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        ('问  题', {'fields': ['question_text']}),
        ('日期资讯', {'fields': ['pub_date']}),
    ]

admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

储存并且查看后台,会发现多了一个 Choice

按下右上角的 「新增 CHOICE」,并且按照下图填写,好了之后按下储存

新增一个选项

开启以下网址查看 http://127.0.0.1:8000/polls/2/

麦当劳已经新增进来了

但是有没有感觉差了一点东西? 对,问题跟选项没办法一起关联。

继续开启 polls/admin.py ,修改成以下程式码

from django.contrib import admin

from .models import Choice, Question

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

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        ('问  题', {'fields': ['question_text']}),
        ('日期资讯', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)

开启 http://127.0.0.1:8000/admin/polls/question/add/,新增一个问题

已经可以从这里直接新增问题与选项了

开启「今天中午吃什么?」问题,将选项新增「牛肉汤」与「肯德基」

按下储存,开启 http://127.0.0.1:8000/polls/2/ 查看投票选项

选项已经新增进来了

但是这样子的呈现方式,当需要新增大量选项的时候,就会发现占用了很多萤幕空间

开启 polls/admin.py ,并且修改成以下程式码

让choice子选项变成表格式的呈现方式,更方便修改choice资料

from django.contrib import admin

from .models import Choice, Question

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

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        ('问  题', {'fields': ['question_text']}),
        ('日期资讯', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)

在问题总览页面显示更多资讯

现在的问题总览页面是长这样

修改 polls/admin.py ,让问题总览页面呈现更多的栏位

from django.contrib import admin

from .models import Choice, Question

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

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question_text', 'pub_date', 'was_published_recently')
    fieldsets = [
        ('问  题', {'fields': ['question_text']}),
        ('日期资讯', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)
多了发布日期与是否为最近的问题栏位

过滤、查询功能

当你的问题有1000、2000 甚至更多,该如何快速找到需要的问题?

修改 polls/admin.py,加入日筛选器

from django.contrib import admin

from .models import Choice, Question

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

class QuestionAdmin(admin.ModelAdmin):
    list_filter = ['pub_date']
    list_display = ('question_text', 'pub_date', 'was_published_recently')
    fieldsets = [
        ('问  题', {'fields': ['question_text']}),
        ('日期资讯', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)

现在它旁边有可以用日来过滤资讯了,那么我想搜寻问题的内容呢?

继续修改 polls/admin.py 档案

from django.contrib import admin

from .models import Choice, Question

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

class QuestionAdmin(admin.ModelAdmin):
    search_fields = ['question_text']
    list_filter = ['pub_date']
    list_display = ('question_text', 'pub_date', 'was_published_recently')
    fieldsets = [
        ('问  题', {'fields': ['question_text']}),
        ('日期资讯', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)
SHXJ
Latest posts by SHXJ (see all)

在〈网站开发专题 week5 自订管理介面〉中有 1 则留言

发布留言