该系列的博客都是按照这个教程上面的内容整理总结出来的,主要是为了方便自己复习和巩固的。http://www.kancloud.cn/wizardforcel/django-chinese-docs-18/98847。该教程确实不错。
1、启动上面章节的项目:
python manage.py runserver
现在,打开一个浏览器并在本地域名上访问 “/admin/” – 例如 http://127.0.0.1:8000/admin/ 。你将看到管理员的登录界面:
现在尝试登录进去, 你将看到 Djaong 的管理索引页:
2、使 poll 应用的数据在管理网站中可编辑
只需要做一件事:我们需要告诉管理网站 Poll 对象要有一个管理界面。为此,我们在你的 polls 目录下创建一个名为 admin.py 的文件,并添加如下内容:
from django.contrib import admin from polls.models import Poll admin.site.register(Poll)
通过 admin.site.register(Poll) 注册了 Poll 模型,Django 就能构造一个默认的 表单。通常情况下,你将要自定义管理表单的外观和功能。这样的话你就需要在注册对象 时告诉 Django 对应的配置。让我们来看看如何在编辑表单上给字段重新排序。修改admin.py文件将 admin.site.register(Poll) 这行替换成:
class PollAdmin(admin.ModelAdmin): fields = ['pub_date', 'question'] admin.site.register(Poll, PollAdmin)
你将遵循这个模式 – 创建一个模型的管理对象,将它作为 admin.site.register() 方法的第二个参数传入 – 当你需要为一个对象做管理界面配置的时候。
3.刚才所说的有许多字段的表单,你可能想将表单中的字段分割成 fieldsets :
class PollAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question']}), ('Date information', {'fields': ['pub_date']}), ] admin.site.register(Poll, PollAdmin)
4.添加关联对象
现在我们有了 Poll 的管理页面。但是一个 Poll 拥有多个 Choices ,而 该管理页面并没有显示对应的 choices 。
是的。
我们有两种方法来解决这个问题。第一种就像刚才 Poll 那样在管理网站上 注册 Choice 。这很简单:
from polls.models import Choice admin.site.register(Choice)
具体的操作,可以自己去用鼠标点击看看。
第二种方法:移除对 Choice 模型的 register() 方法调用 。然后,将 Poll 的注册代码 编辑为如下所示:
from django.contrib import admin
from polls.models import Choice, Poll
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class PollAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Poll, PollAdmin)
这将告诉 Django: “Choice 对象在 Poll 管理页面中被编辑。 默认情况下,提供 3 个 choices 的字段空间。
还有个小问题。为了显示所有关联 Choice 对象的字段需要占用大量的 屏幕空间。为此,Django 提供了一个以表格方式显示内嵌有关联对象的方式; 你只需要将 ChoiceInline 声明改为如下所示:
class ChoiceInline(admin.TabularInline): #...
5.自定义管理界面的变更列表。
现在 Poll 的管理界面看起来不错了,让我们给 “chang list” 页面做些调整 – 显示系统中所有 polls 的页面。下面是现在的样子:
默认情况下, Django 显示的是每个对象 str() 或者__unicode__(self)的结果。但是若是我们能够 显示每个字段的话有时会更有帮助的。要做到这一点,需要使用 list_display 管理选项,这是一个 tuple ,包含了要显示的字段名, 将会以列的形式在该对象的 chang lsit 页上列出来:
class PollAdmin(admin.ModelAdmin): # ... list_display = ('question', 'pub_date')
现在 poll 的变更列表页看起来像这样: