发生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
相关产品推荐
相关产品推荐

