后台管理

#管理后台
#创建管理员用户
$python manage.py createsuperuser
Username: admin
Email address: [email protected]
#你将被要求输入你的密码两次,第二次输入是确认密码
Password: **********
Password (again): *********
Superuser created successfully.
#启动服务器,现在,打开一个浏览器访问你域名中的 “/admin/” —— 例如
 你应该会看到管理站点的登录界面,登录后你将看到几类可编辑的内容:groups和users。 它们是由django.contrib.auth提供的,这个认证框架集成在Django中。

让应用在管理站点中可编辑

但我们的app_poll应用在哪儿? 它没有显示在管理站点的首页面上。

只需要做一件事:我们需要告诉管理站点Question 对象要有一个管理界面。要做这件事,需要打开polls/admin.py文件,把它编辑成这样:

polls/admin.py

from django.contrib import admin
from .models import Questions
admin.site.register(Questions)

然后后台就出现该应用的管理界面了,可以点开进行编辑管理.

自定义管理表单

你没有写多少代码,却得到了这一切。 只需使用admin.site.register(Question)注册Question模型,Django就能构造一个默认的表单表示。通常,你会想要自定义管理界面中表单的外观和功能。你可以通过在注册对象的时候告知Django一些你想要的选项来完成。

让我们通过对编辑表单上的字段重新排序来看一下它是如何工作的。admin.site.register(Question)行替换成:

polls/admin.py

from django.contrib import adminfrom .models import Questionclass QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']admin.site.register(Question, QuestionAdmin)

无论何时,当你需要为一个对象修改管理选项的话,就按照这样的步骤来做:创建一个模型管理对象,然后把该对象作为第二个参数传入admin.site.register()

上面那特定的更改,使得“Publication date”字段排在“Question”字段前面:

仅有两个字段不会令你印象深刻,但是当管理有许多字段的表单时,选择一个直观的排序方式是一个重要而实用的细节。

说到有许多字段的表单,你可能想把表单分割成字段集:

polls/admin.py

from django.contrib import adminfrom .models import Questionclass QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]admin.site.register(Question, QuestionAdmin)

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

你可以任意地为每个字段集指定HTML样式类。

polls/admin.py

from django.contrib import adminfrom .models import Questionclass QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]admin.site.register(Question, QuestionAdmin)

添加关联对象

好了,我们已经有自己的Question管理界面。 但是一个Question有多个Choices,管理界面中并没有将选项显示出来。

的确没有,但只是暂时没有。

有两种方法来解决这个问题。 第一种是像我们为Question做的一样,在管理站点中注册Choice这简单:

polls/admin.py

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

现在,可以在Django管理站点中管理“Choices”。 “Add choice”表单看起来像这样:

在这个表单中,“Question”字段是一个可选的选项框,包含数据库中所有的Question。 Django知道ForeignKey应该在管理界面中显示为一个