配置参数:
admin.py
from django.contrib import admin
from blog import models
admin.site.register(models.UserInfo)
元信息
verbose_name :显示名称
verbose_name_plural :复数多个显示的名称
models.py
class UserInfo(AbstractUser):
"""
class Meta:
verbose_name = "用户"
verbose_name_plural = verbose_name
配置类:
在后台页面展示不止一个对象,显示其中的字段(不能是多对多字段)
admin.py
from django.contrib import admin
from .models import *
from django.utils.safestring import mark_safe
class BookConfig(admin.ModelAdmin):
# 显示字段可增加函数功能
def deletes(self):
return mark_safe("<a href=''>删除</a>")
# 显示字段
list_display = ["title","price","publishDate",'publish',deletes]
# links字段可点击
list_display_links = ["price"]
# 按字段过滤,快速筛选显示
list_filter=["price","title","authors","publish"]
# 列表时,可以编辑的列
list_editable=["title",]
# 按字段搜索
search_fields=["title","price"]
# 自定制批量处理函数
def patch_init(self,request,queryset):
queryset.update(price=100)
patch_init.short_description = "批量初始化"
# 批量处理
actions = [patch_init,]
#change_list_template="list.html"
# 修改时只显示的字段
fields = ('title',)
触发Model中的验证和错误提示有两种方式:
a.Django
Admin中的错误信息会优先根据Admiin内部的ModelForm错误信息提示,如果都成功,才来检查Model的字段并显示指定错误信息;
b.调用Model对象的clean_fields方法 如:
# models.py
class UserInfo(models.Model):
nid = models.AutoField(primary_key=True)
username = models.CharField(max_length=32)
email = models.EmailField(error_messages={'invalid': '格式错了.'})
# views.py
def index(request):
obj = models.UserInfo(username='11234', email='uu')
try:
print(obj.clean_fields())
except Exception as e:
print(e)
return HttpResponse('ok')
# Model的clean方法是一个钩子,可用于定制操作,如:上述的异常处理。
2.Admin中修改错误提示
# admin.py
from django.contrib import admin
from model_club import models
from django import forms
class UserInfoForm(forms.ModelForm):
username = forms.CharField(error_messages={'required': '用户名不能为空.'})
email = forms.EmailField(error_messages={'invalid': '邮箱格式错误.'})
age = forms.IntegerField(initial=1, error_messages={'required': '请输入数值.', 'invalid': '年龄必须为数值.'})
class Meta:
model = models.UserInfo
# fields = ('username',)
fields = "__all__"
class UserInfoAdmin(admin.ModelAdmin):
form = UserInfoForm
admin.site.register(models.UserInfo, UserInfoAdmin)