不忘初心,
牢记使命。

Django重写admin的modelform校验器

2021-04-04 大聪明 0评论 207 2喜欢

Django重写admin的modelform校验器

背景

在我的博客中,文章表有标题、简介、内容等字段。

一般情况下发文章时,我不想写文章的简介(太懒了,麻烦)。这时候就想到能不能直接截取我内容的前200个字符作为简介呢?答案是肯定的!

猜想

首先,我猜想:即使是admin他也肯定是封装好了校验功能的。就比如我们自己做校验时,自己写一个model的class,自己在写一个modelform校验器对他进行校验。所以我们就去找admin的modelform校验器,然后重写它就行了。

操作

首先,在我的app下的admin.py文件中,创建一个modelform类,指向我的文章表Article

这里我以为直接在cleaned_data中拿content就行,but提示没有这个字段。可能是我的content用的是mdeditor的MDFIELD的吧。经过查找我找到了一个data字段,它包含了Article表的所有字段内容,在这里去除content的内容即可。代码见如下:

class ArticleForm(forms.ModelForm):
    class Meta:
        model = models.Article
        fields = "__all__"

    def clean_desc(self):

        desc = self.cleaned_data['desc']
        content = self.data['content'][:200]
        print(desc)
        if desc:
            return desc
        else:
            desc = content
            return desc

然后,告诉admin我重写了Article的modelform,这里注意,要加admin装饰器才生效。加上这个装饰器后前边不能再有对Article表的注册。

@admin.register(models.Article)
class ArticleAdmin(admin.ModelAdmin):
    form = ArticleForm

发表评论 取消回复

电子邮件地址不会被公开。

请输入正确格式的qq邮箱
请输入以http或https开头的URL,格式如:https://libo_sober.top