A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

自动化的后台应用程序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_links

list_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')




1 个回复

倒序浏览
奈斯,棒棒哒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马