[django] ORM Admin

21 篇文章 0 订阅

yuan详细

配置参数:

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moke丶青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值