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