【django 学习笔记】05-admin

激活管理界面

第一步, 对你的settings 文件做如下这些改变:

1. ‘django.contrib.admin’ 加入settingINSTALLED_APPS 配置中 (INSTALLED_APPS 中的配置顺序是没有 关系的, 但是我们喜欢保持一定顺序以 方便人来阅读)

2. 保证INSTALLED_APPS 中包含‘django.contrib.auth’,'django.contrib.contenttypes’

‘django.contrib.sessions’,Django 的 管理工具需要这3 个包。 ( 如果你跟随本文制作mysite 项目的话, 那么请注意我们在第五章的时候把这三项INSTALLED_APPS 条目注释了。现在, 请把注释取消。)

3. 确保MIDDLEWARE_CLASSES 包含 ‘django.middleware.common.CommonMiddleware’ ‘django.contrib.sessions.middleware.SessionMiddleware’ ‘django.contrib.auth.middleware.AuthenticationMiddleware’ ( 再次提醒, 如果有跟着做mysite 的话, 请把在第五章做的注释取消。) 运行 python manage.py syncdb 。 这一步将生成管理界面使用的额外数据库表。 当你把‘django.contrib.auth’ 加 进INSTALLED_APPS, 第一次运行syncdb 命令时, 系统会请你创建一个超级用户。 如果你不这么作, 你需要运行python manage.py createsuperuser 来另外创建一个admin 的用户帐号, 否则你将不能登入admin ( 提醒一句: 只有当INSTALLED_APPS 包 含‘django.contrib.auth’ ,python manage.py createsuperuser 这个命令才可用.)

第三,admin 访问配置在URLconf( 记住,urls.py). 默认情况下, 命令django-admin.py startproject 生 成的文件urls.py 是将Django admin 的路径注释掉的, 你所要做的就是取消注释。 请注意, 以下内容是必须确保存在的:

# Include these import statements…

from django.contrib import admin

admin.autodiscover()

# And include this URLpattern…

urlpatterns = patterns(”,

# …

(r’^admin/’, include(admin.site.urls)),

# …

)

当这一切都配置好后, 现在你将发 现Django 管理工具可以运行了。 启动开发服务器( 如前:“ python manage.py runserver“ ), 然后在浏览器中访问:http://127.0.0.1:8000/admin/

将你的Models 加入到Admin 管理中在“ books“ 目录下(“ mysite/books“ ), 创建一个文 件:“ admin.py“ , 然后输 入以下代码:

from django.contrib import admin

from mysite.books.models import Publisher, Author, Book

admin.site.register(Publisher)

admin.site.register(Author)

admin.site.register(Book)

这里需要提到的一个特性是, 管理 工具处理外键和多对多关系( 这两种关系 可以在“ Book“ 模块中找到) 的方法。 作为提醒, 这里有个“ Book“ 模块的例子:

class Book(models.Model):

title = models.CharField(max_length=100)

authors = models.ManyToManyField(Author)

publisher = models.ForeignKey(Publisher)

publication_date = models.DateField()

def __unicode__(self):

return self.title

1 Add book 页面中(“ http://127.0.0.1:8000/admin/books/book/add/“ ),“ 外键“ publisher 用一个选择框显示,“ 多对多 字段author 用一个多选框显示。 点击两个字段后面的绿色加号, 可以让 你添加相关的记录。举个例子, 如果你点 击Publisher 后面的加号, 你将会得到一个弹出窗口来添加一个 publisher 。 当你在那个窗口中成功创建了一个publisher,Add book 表单会自动把它更新到字段上去 花 巧.

设置字段可选

为了指定email 字段为可选, 你只要编辑Book 模块( 回想第五章, 它在mysite/books/models.py 文 件里),email 字段上加上blank=True 。代码如下:

class Author(models.Model):

first_name = models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField(**blank=True** )

设置日期型和数字型字段可选

虽然blank=True 同样 适用于日期型和数字型字段

class Book(models.Model):

title = models.CharField(max_length=100)

authors = models.ManyToManyField(Author)

publisher = models.ForeignKey(Publisher)

publication_date = models.DateField(**blank=True, null=True** )

添加null=True 比添加blank=True 复杂。因为null=True 改变了数据的语义, 即改变了CREATE TABLE 语句,publication_date 字段上的NOT NULL 删除了。 要完成这些改动, 我们还需要更新数据库。

自定义字段标签

如何将Author.email 的 标签改为e-mail, 中间有个横线。

class Author(models.Model):

first_name = models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField(blank=True, **verbose_name=’e-mail’** )

最后还需注意的是, 为了使语法简 洁, 你可以把它当作固定位置的参数传 递。 这个例子与上面那个的效果相 同。

class Author(models.Model):

first_name = models.CharField(max_length=30)

last_name = models.CharField(max_length=40)

email = models.EmailField(**’e-mail’,** blank=True)

自定义列表

自定义Author 模块的列表中 的显示字段。

为了达到这个目的, 我们将为Author 模块定义一个ModelAdmin 类。 这个类是自定义管理工具的关键, 其中最 基 本的一件事情是允许你指定列表中的字段。 打开admin.py 并 修改:

from django.contrib import admin

from mysite.books.models import Publisher, Author, Book

class AuthorAdmin(admin.ModelAdmin):**

list_display = (‘first_name’, ‘last_name’, ‘email’)**

admin.site.register(Publisher)

admin.site.register(Author, AuthorAdmin)**

admin.site.register(Book)

添加一个快速查询栏

AuthorAdmin 追加search_fields,:

class AuthorAdmin(admin.ModelAdmin):

list_display = (‘first_name’, ‘last_name’, ‘email’)

search_fields = (‘first_name’, ‘last_name’)

让我们为Book 列 表页添加一些过滤器

from django.contrib import admin

from mysite.books.models import Publisher, Author, Book

class AuthorAdmin(admin.ModelAdmin):

list_display = (‘first_name’, ‘last_name’, ‘email’)

search_fields = (‘first_name’, ‘last_name’)

class BookAdmin(admin.ModelAdmin):**

list_display = (‘title’, ‘publisher’, ‘publication_date’)**

list_filter = (‘publication_date’,)**

admin.site.register(Publisher)

admin.site.register(Author, AuthorAdmin)

admin.site.register(Book, BookAdmin)

另外一种过滤日期的方式是使用date_hierarchy 选 项,:

class BookAdmin(admin.ModelAdmin):

list_display = (‘title’, ‘publisher’, ‘publication_date’)

list_filter = (‘publication_date’,)

date_hierarchy = ‘publication_date’**

最后, 让我们改变默认的排序方式,publication date 降序排列。 列表页面默认按照模块class Meta ( 详 见 第五章) 中的ordering 所指的列排序。但目前没有指定ordering, 所以当前排序是没有定义的。

class BookAdmin(admin.ModelAdmin):

list_display = (‘title’, ‘publisher’, ‘publication_date’)

list_filter = (‘publication_date’,)

date_hierarchy = ‘publication_date’

ordering = (‘-publication_date’,)

自定义编辑表单

我们可以通过使用 ModelAdmin 子 类中的fields 选项来改变它:

class BookAdmin(admin.ModelAdmin):

list_display = (‘title’, ‘publisher’, ‘publication_date’)

list_filter = (‘publication_date’,)

date_hierarchy = ‘publication_date’

ordering = (‘-publication_date’,)

fields = (‘title’, ‘authors’, ‘publisher’, ‘publication_date’)

通过fields 这个选项, 你可以排除一些不想被其他人编辑的fields 只要不选上不想被编辑的field(s) 即可。 当你 的admi 用户只是被信任可以更改你的某一部分数据时, 或者, 你的数据被一些外部的程序自动处理而改变了 了, 你就可以用这个功能。 例如,book 数据库中, 我们可以隐藏publication_date , 以防止它被编 辑。

class BookAdmin(admin.ModelAdmin):

list_display = (‘title’, ‘publisher’, ‘publication_date’)

list_filter = (‘publication_date’,)

date_hierarchy = ‘publication_date’

ordering = (‘-publication_date’,)

fields = (‘title’, ‘authors’, ‘publisher’)

更好的办法是使用filter_horizontal 。 让我们把它添加到BookAdmin , 然后看看它的效果。

class BookAdmin(admin.ModelAdmin):

list_display = (‘title’, ‘publisher’, ‘publication_date’)

list_filter = (‘publication_date’,)

date_hierarchy = ‘publication_date’

ordering = (‘-publication_date’,)

filter_horizontal = (‘authors’,)

使用“ raw_id_fields“ 选 项。它是一个包含外键字段名称的元组, 它 包含的字段将被展现成 文本框“ , 而不再是 下拉框 。见图 6-14

class BookAdmin(admin.ModelAdmin):

list_display = (‘title’, ‘publisher’, ‘publication_date’)

list_filter = (‘publication_date’,)

date_hierarchy = ‘publication_date’

ordering = (‘-publication_date’,)

filter_horizontal = (‘authors’,)

raw_id_fields = (‘publisher’,)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值