Django-admin 管理工具
描述:admin是后台管理工具
在admin.py中只需要讲Mode中的某个类注册,即可在Admin中实现增删改查的功能,
如:admin.site.register(models.UserInfo)
个性化定制
想实现更多的定制操作,需要利用ModelAdmin进行操作,如:
方式一:
from django.contrib import admin
import models
# Register your models here.
class UserAdmin(admin.ModelAdmin):
list_display = ('user', 'pwd',)
admin.site.register(models.UserInfo, UserAdmin) # 第一个参数可以是列表
方式二:
@admin.register(models.UserInfo) # 第一个参数可以是列表
class UserAdmin(admin.ModelAdmin):
list_display = ('user', 'pwd',)
ModelAdmin中提供了大量的可定制功能,下面举例一些常用的功能字段进行示例说明
- list_display, 列表时,定制显示的列。
list_display 还可以自定义添加其他的功能字段,比如 不用admin组件的删除,自定义一个删除,mark_safe和模板中的safe函数一样,只不过这个是用在views等函数中的from django.utils.safestring import mark_safe class admin_UserInfo(admin.ModelAdmin): def deletes(self): return mark_safe("<a href='#'>删除</a>") list_display = ["avatar","id",deletes] admin.site.register(models.UserInfo,admin_UserInfo)
- list_display_links 定制列可以进行点击跳转,但是字段必须要在list_display中进行展示
- list_filter 定制右侧快速筛选。
- list_editable 列表时,可以编辑的列
- search_fields 添加模糊搜索的功能的字段,如果多个字段符合,会同时显示结果
- date_hierarchy 对Date和DateTime类型进行搜索,但是数据多了容易卡,非必要不用
- fields,exclude fields 详情页展示的字段和exclude 相反,是排除展示的字段
- readonly_fields 详细页面时,只读字段
- inlines 如果有book表和category表做FK,那么详细页面可以对2张表进行增删改操作
更多的多对多表以及其他内链接示例参考 https://www.cnblogs.com/linxiyue/p/4074562.html
module.py
class Blog(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name="个人博客标题", max_length=64)
sitename = models.CharField(verbose_name="站点名称", max_length=64)
theme = models.CharField(verbose_name="个人博客主题样式", max_length=32)
def __str__(self):
return self.title
class Category(models.Model):
'''个人文章分类表'''
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name="分类标题", max_length=64)
blog = models.ForeignKey(to="Blog", verbose_name="所属博客", to_field="nid",on_delete=models.CASCADE)
admin.py
class bookinline(admin.StackedInline):
model = models.Category
class myblog(admin.ModelAdmin):
list_display = ["sitename","theme"]
inlines = [bookinline]
admin.site.register(models.Blog,myblog)
10. action 定制action中的操作
class admin_UserInfo(admin.ModelAdmin):
def deletes(self):
return mark_safe("<a href='#'>删除</a>")
list_display = ["id","username",deletes,"telphone","create_time","avatar","email"]
def batch_set_0(self,request, queryset):
ret = queryset.filter(blog_id__isnull=True).update(email="abc@sina.com")
batch_set_0.short_description = "自定义Actions把blog_id为空的邮箱设置为abc@sina.com"
actions = [batch_set_0, ]
# Action选项都是在页面上方显示
actions_on_top = False
# Action选项都是在页面下方显示
actions_on_bottom = True
# 是否显示选择个数
actions_selection_counter = True
11. 定制HTML模板
add_form_template = None
change_form_template = None
change_list_template = None 后面写模板在templates的路径即可.
delete_confirmation_template = None
delete_selected_confirmation_template = None
object_history_template = None
-
raw_id_fields,详细页面,针对FK和M2M字段变成以Input框形式
@admin.register(models.UserInfo) class UserAdmin(admin.ModelAdmin): raw_id_fields = ('FK字段', 'M2M字段',)
-
ordering,列表时,数据排序规则
字段前的+-代表升序,降序
```
@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
ordering = ('-id',)
或
def get_ordering(self, request):
return ['-id', ]
```
- radio_fields,详细页面时,使用radio显示选项(FK默认使用select)
radio_fields = {"ug": admin.VERTICAL} # 或admin.HORIZONTAL
- form = ModelForm,用于定制用户请求时候表单验证
```
from app01 import models
from django.forms import ModelForm
from django.forms import fields
class MyForm(ModelForm):
others = fields.CharField()
class Meta:
model = models = models.UserInfo
fields = "__all__"
@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
form = MyForm
```
- empty_value_display = "列数据为空时,显示默认值"
@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
empty_value_display = "列数据为空时,默认显示"
list_display = ('user','pwd','up')
def up(self,obj):
return obj.user
up.empty_value_display = "指定列数据为空时,默认显示"