ModelAdmin 类能够自定义后台管理系统,可以让展现形式更加美观。在本节,我们将对此知识点进行讲解,最后得到一个视觉效果美观的后台管理系统。
#在应用index/admin.py 里定义模型管理器类 class XXXX_Manager(admin.ModelAdmin): ...
# 注册MyModel模型类与管理器类MyModel_Manager关联
from django.contrib import admin from index.models import MyModel admin.site.register(MyModel, MyModel_Manager)#使用register注册关联关系 #或者使用装饰器进行注册 @admin.register(MyModel)#在定义的模型管理器类中使用装饰器 class MyModelAdmin(admin.ModelAdmin) ...这里需要大家注意,Django 规定每一个 Model 只可以注册一次,所以再注册同一个 Model 时,需要将之前注册的语句注释(或者删除),否则会抛出如下异常:
django.admin.sites.AlreadyRegistered 异常
上面介绍了两种方式可以实现 admin 管理器与模型类进行关联,两种方式实现的功能是一样的,但是相比较而言使用装饰器的方法会更加简单一些。list_display=[]
在使用 list_display 时需要特别注意它的两个特性:
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
search_fields = ['title','pub__pubname']
对于搜索框中的输入词,Django会将其分割成多个关键字,并返回所有包含这些关键字的实例对象。提示:需要注意的是,每个关键字都必须是 search_fields 选项中的至少一个。
django.contrib.admin.SimpleListFilter
对于 Model 的字段名,字段类型必须属于 BooleanField、CharField、DateField、DateTimeField、IntegerField、ForeignKey 或 ManyToManyField 中的一种。同样也可以使用双下画线实现跨表关联。示例如下所示:list_filter= ['title','pub__pubname']
注意:要使用 list_display_links 这个属性 ,必须先要定义 list_display。
from django.contrib import admin
from index.models import Book,Author,UserInfo,PubName,ExtendUserinfo
@admin.register(Book) #使用admin.register(Model)来注册
class BookAdmin(admin.ModelAdmin):
list_display = ['id','title','price','retail_price','pub_name']
def pub_name(self,obj): #显示约束字段pubname
return u'%s'%obj.pub.pubname #u会对字符串中的\n等进行转义
pub_name.admin_order_field = 'pub' # 字段排序
pub_name.short_description = '出版社' # 属性name重命名
list_display_links = ['title']
list_filter = ['pub__pubname']#ForeignKey字段
list_editable=['price','retail_price']
search_fields = ['title','pub__pubname']
raw_id_fields = ['pub']
#注册Model到admin管理后台
admin.site.register([Author,UserInfo,PubName,ExtendUserinfo])
大家看到优化后的 Admin 管理界面更加适合阅读,而且更易于后台管理人员进行操作,比如通过增加书籍按钮实现书籍的添加等等,小伙伴们可以根据本节讲解的知识,将其余的 Model 也进行优化展示,不妨自己动手试一试。如果你想更全面的了解后本节知识点,建议参阅官方文档《ModelAdmin属性选项》。
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有