黑马程序员技术交流社区
标题: 【上海校区】【Django】使用admin(八) [打印本页]
作者: 梦缠绕的时候 时间: 2018-8-2 09:31
标题: 【上海校区】【Django】使用admin(八)
自动化的后台应用程序admin称得上是Django“皇冠上的明珠”。任何对为Web应用创建简单的“CRUD”(Create,Read,Update,Delete)接口感到厌倦的人来说,这绝对是喜从天降。
由于admin后台并不是Django的必要组件,你必须在setting.py文件里指定你要使用它,就和指定其他app一样在INSTALLED_APPS里面添加一行(高版本的django无需添加)
django.contrib.admin创建模型:
from django.db import models
# Create your models here.
class User(models.Model):
name = models.CharField(max_length=50, verbose_name="作者")
def __unicode__(self):
return self.name
def __str__(self):
return self.name
class Book(models.Model):
author = models.ForeignKey(User, max_length=50, on_delete=models.CASCADE, related_name="test")
title = models.CharField(max_length=50, verbose_name="书名")
def __unicode__(self):
return self.title
def __str__(self):
return self.title
创建超级用户,用来登录admin后台管理
python manage.py createsuperuser创建成功,启动服务器,使用创建的用户登录admin后台
为了让 admin 界面管理某个数据模型,我们需要先注册该数据模型到 admin。比如,我们之前在 TestModel 中已经创建了模型 Test 。修改 TestModel/admin.py:
from django.contrib import admin
# Register your models here.
from TestModel.models import User, Book
admin.site.register(User)
admin.site.register(Book)
刷新之后如下
自定义表单我们可以自定义管理页面,来取代默认的页面。比如上面的 "add" 页面。我们只想显示title部分。修改 TestModel/admin.py:
from django.contrib import admin
# Register your models here.
from TestModel.models import User, Book
class BookAdmin(admin.ModelAdmin):
fields = ('title',)
admin.site.register(User)
admin.site.register(Book, BookAdmin)
结果如下,只显示title,上面定义了一个BookAdmin类用来管理页面的显示格式,fields定义要显示的字段
内联(Inline)显示上面的 User是 Book的外部键,所以有外部参考的关系。
而在默认的页面显示中,将两者分离开来,无法体现出两者的从属关系。我们可以使用内联显示,让 Book附加在 User 的编辑页面上显示。
修改TestModel/admin.py:
from django.contrib import admin
# Register your models here.
from TestModel.models import User, Book
class BookInline(admin.TabularInline):
model = Book
class UserAdmin(admin.ModelAdmin):
inlines = [BookInline]
admin.site.register(User, UserAdmin)
刷新后结果如下图
列表页的显示 list_display当Book里面录入数据之后,列表展示如下:
我们也可以自定义该页面的显示,比如在列表中显示更多的栏目,只需要在 BookAdmin 中增加 list_display 属性:
from django.contrib import admin
# Register your models here.
from TestModel.models import User, Book
class BookInline(admin.TabularInline):
model = Book
class UserAdmin(admin.ModelAdmin):
inlines = [BookInline]
class BookAdmin(admin.ModelAdmin):
list_display = ['author', 'title']
fields = ('author', 'title')
admin.site.register(User, UserAdmin)
admin.site.register(Book, BookAdmin)
刷新下图显示:
搜索 search_fields搜索功能在管理大量记录时非常有,我们可以使用 search_fields 为该列表页增加搜索栏:
class BookAdmin(admin.ModelAdmin):
search_fields = ('author', 'title')
list_display = ['author', 'title']
fields = ('author', 'title')
list_display_linkslist_display_links变量其实与list_display有一定的关联,它的作用是提供一个超链接,转到form_change页面,就是修改页面。默认情况下,就是list_display变量的第一个元素提供超链接。
class BookAdmin(admin.ModelAdmin):
search_fields = ('author', 'title')
list_display = ['author', 'title']
list_display_links = ('author', 'title')
fields = ('author', 'title')
list_per_page每一页最大的对象个数,如下,每一页显示20个对象:
class BookAdmin(admin.ModelAdmin):
search_fields = ('author', 'title')
list_display = ['id', 'author', 'title']
list_display_links = ('id', 'author', 'title')
list_per_page = 20
fields = ('author', 'title')
list_filter 筛选器是Django后台管理重要的功能之一,而且Django为我们提供了一些实用的筛选器。
class BookAdmin(admin.ModelAdmin):
search_fields = ('author', 'title')
list_display = ['id', 'author', 'title']
list_display_links = ('id', 'author', 'title')
list_filter = ('author', 'title')
list_per_page = 20
ordering = ('-id',)
fields = ('author', 'title')
ordering对象按规则排序,下列按id倒序排列
class BookAdmin(admin.ModelAdmin):
search_fields = ('author', 'title')
list_display = ['id', 'author', 'title']
list_display_links = ('id', 'author', 'title')
list_per_page = 20
ordering = ('-id',)
fields = ('author', 'title')
作者: 不二晨 时间: 2018-8-2 17:36
奈斯,棒棒哒
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |