You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

发生JSONSchemaValidationError时如何在Django Admin模型字段上方显示自定义错误

解决方案

你当前的错误是因为校验逻辑放置位置错误导致Django Admin无法将错误绑定到对应字段,修改方式如下:

核心修改逻辑

Django Admin的字段级错误提示需要在模型clean方法中抛出绑定字段的ValidationError,你当前把校验逻辑放在save方法中,且先执行了父类save操作才校验,不仅会产生脏数据,也会触发全局错误页。

修改后代码示例

from django.core.exceptions import ValidationError
# 请替换为你实际的JSONSchema依赖导入路径
from your_module import validate, get_tags_json_schema, JSONSchemaValidationError

class Product(models.Model):
    new_tags = models.JSONField(
        null=True, 
        default=None, 
        blank=True, 
        help_text="标签必须为合法JSON格式,需符合<TagName_tag>的规范要求。"
    )

    def clean(self):
        super().clean()
        if self.new_tags is not None:
            try:
                validate(
                    instance=self.new_tags,
                    schema=get_tags_json_schema(),
                )
            except JSONSchemaValidationError as e:
                # 错误绑定到new_tags字段,Admin会自动渲染到字段旁
                raise ValidationError({
                    'new_tags': f"标签插入错误:JSON不合法,错误详情:{str(e)}"
                })

    def save(self, *args, **kwargs):
        # save方法无需再做该校验,clean会在保存前自动触发
        super().save(*args, **kwargs)

补充说明

  • 如果需要对特定Admin站点单独做校验,也可以自定义ModelForm,在表单的clean方法中实现校验逻辑,再绑定到对应的ModelAdmin即可
  • 你可以直接提取JSONSchemaValidationError中的具体错误信息(比如哪个字段不符合要求、格式错误点),拼接在提示中,用户可以直接看到具体问题,无需跳转页面

内容的提问来源于stack exchange,提问作者Ajay Kumar Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:18:02