如何在在Django Admin 中显示自定义验证异常

在本教程中,我们将学习如何在 Django admin 上显示自定义验证异常。

了解问题

当我们尝试通过表单保存不符合要求的数据时,Django自带admin将抛出异常。通常我们需要根据项目的需要创建自定义验证器并在Django admin中显示异常信息。比如您希望用户输入的电话号码采用特定格式,或者您希望确保某个字段以大写字母开头。

有很多方法可以实现这一点,但如果您的目标是确保仅通过Django admin进行适当的验证,那么本教程适合您。

在 Django Admin 中显示自定义验证异常

我们将在本教程中以流行的博客项目为例,目标是确保帖子的标题采用了正确的大小写格式。如果标题不符合格式要求,Django Admin中将显示如下异常信息:

让我们先看看现有的models.py和admin.py文件。

models.py

class Post(models.Model):
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(max_length=200, unique=True)
    author = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="blog_posts")
    updated_on = models.DateTimeField(auto_now=True)
    content = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=0)
    summary = models.CharField(max_length=500, null=True, blank=True)


    class Meta:
        ordering = ["-created_on"]


    def __str__(self):
        return self.title

admin.py

@admin.register(Post)
class PostAdmin(ModelAdmin):
    list_display = ('title', 'slug', 'status', 'created_on')
    list_filter = ('status', 'created_on')
    search_fields = ['title', 'content']
    prepopulated_fields = {'slug': ('title',)}

现在要为管理站点创建自定义验证器,我们需要为我们的模型创建一个自定义表单。可以在同一个文件或单独的文件中创建一个这样的表单PostForm,如下所示:

from django import forms


class PostForm(forms.ModelForm):
    def clean(self):
        title = self.cleaned_data['title']
        if not title.istitle():
            raise forms.ValidationError({'title': "Not a proper titlecased string"})

模型表单带有clean()负责执行验证的方法,它从cleaned_data字典中获取标题值并运行验证。如果验证失败,则引发ValidationError异常消息。

最后我们需要将自定义的表单与PostAdmin结合。

@admin.register(Post)
class PostAdmin(ModelAdmin):
    form = PostForm
    list_display = ('title', 'slug', 'status', 'created_on')
    list_filter = ('status', 'created_on')
    search_fields = ['title', 'content']
    prepopulated_fields = {'slug': ('title',)}

到此,大功告成!保存文件并启动Django测试服务器就可以看到效果啦。

原文:https://djangocentral.com/displaying-custom-validation-exception-in-django-admin/

翻译:大江狗

推荐阅读

Django进阶(1): admin后台高级玩法(多图)

Django基础(21): Django admin管理后台详解(下)如何自定义actions, 表单和美化admin

Django基础(5): 表单forms的设计与使用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值