【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_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')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值