Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段
https://docs.djangoproject.com/zh-hans/2.1/intro/tutorial07/
每页中显示多少条数据,默认为每页显示100条数据,属性如下:
list_per_page=100
1)打开assetinfo/admin.py文件,修改ServerInfoAdmin类如下:
@admin.register(ServerInfo)
class ServerInfoAdmin(admin.ModelAdmin):
list_per_page = 2 # 设置每页显示两条数据
2)在浏览器中查看服务器信息的列表页面,效果如下图:
顶部显示的属性,设置为True在顶部显示,设置为False不在顶部显示,默认为True。
actions_on_top=True
底部显示的属性,设置为True在底部显示,设置为False不在底部显示,默认为False。
actions_on_bottom=False
2)在浏览器中刷新效果如下图:
属性如下:
list_display=[模型字段1,模型字段2,...]
1)打开assetinfo/admin.py文件,修改ServerInfoAdmin类如下:
@admin.register(ServerInfo)
class ServerInfoAdmin(admin.ModelAdmin):
list_per_page = 2
list_display = ['id', 'server_hostname', 'server_intranet_ip','server_internet_ip','server_shelves_date','update_time']
2)在浏览器中刷新效果如下图:
点击列头可以进行升序或降序排列。
列可以是模型字段,还可以是模型方法,要求方法有返回值。
1)打开assetinfo/models.py文件,修改ServerInfo类如下:
class ServerInfo(models.Model):
server_hostname = models.CharField(max_length=20, default=None)
....
# 设置返回hostname
def hostname(self):
return self.server_hostname
2)打开assetinfo/admin.py文件,修改ServerInfoAdmin类如下:
class ServerInfoAdmin(admin.ModelAdmin):
....
list_display = ['id', 'hostname', 'server_intranet_ip','server_internet_ip','server_shelves_date','update_time']
3)在浏览器中刷新效果如下图:
方法列是不能排序的,如果需要排序,则需要为方法指定排序依据。
admin_order_field=模型类字段
1)打开assetinfo/models.py文件,修改ServerInfo类如下:
class ServerInfo(models.Model):
....
# 设置返回hostname
def hostname(self):
return self.server_hostname
hostname.admin_order_field='server_hostname'
2)在浏览器中刷新效果如下图:
列标题默认为属性或方法的名称,可以通过属性设置。需要先将模型字段封装成方法,再对方法使用这个属性,模型字段不能直接使用这个属性。
short_description='列标题'
1)打开assetinfo/models.py文件,修改ServerInfo类如下:
class ServerInfo(models.Model):
...
# 设置返回hostname
def hostname(self):
return self.server_hostname
hostname.admin_order_field='server_hostname'
hostname.short_description='服务器名称' # 设置方法的列标题
2)在浏览器中刷新效果如下图:
在模型表中如果还要关联的其他模型表的字段,那么可以通过在模型中封装方法来展示。
1)打开assetinfo/models.py文件,修改ServerInfo类如下:
class ServerInfo(models.Model):
....
# 设置返回hostname
def hostname(self):
return self.server_hostname
hostname.admin_order_field='server_hostname'
hostname.short_description='服务器名称' # 设置方法的列标题
# 查询一个中间件信息
def midware_name(self):
midware = MiddlewareInfo.middlewares_obj.get(id=1)
return midware.name
midware_name.short_description='中间件名称'
2)打开assetinfo/admin.py文件,修改ServerInfoAdmin类如下:
@admin.register(ServerInfo)
class ServerInfoAdmin(admin.ModelAdmin):
...
list_display = ['id', 'hostname','midware_name',....]
3)在浏览器中刷新效果如下图:
属性如下,只能接收字段,会将对应字段的值列出来,用于快速过滤。一般用于有重复值的字段。
list_filter=[]
1)打开assetinfo/admin.py文件,修改ServerInfoAdmin类如下:
class ServerInfoAdmin(admin.ModelAdmin):
list_filter = ['server_intranet_ip']
2)在浏览器中刷新效果如下图:
属性如下,用于对指定字段的值进行搜索,支持模糊查询。列表类型,表示在这些字段上进行搜索。
search_fields=[]
1)打开assetinfo/admin.py文件,修改ServerInfoAdmin类如下:
class ServerInfoAdmin(admin.ModelAdmin):
search_fields = ['server_hostname']
....
2)在浏览器中刷新效果如下图:
在上面模型类通过方法可以设置中文的列标题,但是直接字段是用不同的方式来设置中文标题的。
1)打开assetinfo/models.py文件,修改模型类,为属性指定verbose_name参数,即第一个参数。
class ServerInfo(models.Model):
server_hostname = models.CharField(max_length=20, default=None, verbose_name='服务器名称')
server_intranet_ip = models.CharField(max_length=20, default=None, verbose_name='内网IP')
server_internet_ip = models.CharField(max_length=20, default=None, verbose_name='外网IP')
server_shelves_date = models.DateField(auto_now_add=True, verbose_name='服务设置时间') # 数据加入时间
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间') # 数据更新时间
...
2)在浏览器中刷新效果如下图: