如何修改Django模型中unique_together的错误提示信息?
Django自定义unique_together错误提示
针对你的需求,要将unique_together约束的错误提示绑定到field2并自定义文案,有两种可行方案:
方案一:重写unique_error_message方法
你之前的代码未生效,是因为没有针对目标约束做判断,且未返回绑定到指定字段的错误字典。正确写法如下:
from django.db import models from django.core.exceptions import ValidationError class MyModel(models.Model): field1 = models.CharField(max_length=50) field2 = models.CharField(max_length=50) class Meta: unique_together = ('field1', 'field2') def unique_error_message(self, model_class, unique_check): # 判断当前触发的是field1和field2的联合唯一约束 if unique_check == ('field1', 'field2'): # 返回绑定到field2的自定义错误 return ValidationError({'field2': '该值已存在'}) # 其他约束使用默认错误提示 return super().unique_error_message(model_class, unique_check)
方案二:在clean方法中手动校验
如果需要更灵活的逻辑控制,可以在模型的clean方法中手动检查联合唯一约束:
from django.db import models from django.core.exceptions import ValidationError class MyModel(models.Model): field1 = models.CharField(max_length=50) field2 = models.CharField(max_length=50) class Meta: unique_together = ('field1', 'field2') def clean(self): # 先执行父类的clean逻辑 super().clean() # 构建查询条件,排除当前实例(避免更新时误判) query = MyModel.objects.filter(field1=self.field1, field2=self.field2) if self.pk: query = query.exclude(pk=self.pk) # 检查是否存在重复记录 if query.exists(): raise ValidationError({'field2': '该值已存在'})
注意:如果使用表单或序列化器,需要确保调用了模型的clean方法——Django的ModelForm会自动触发,DRF的ModelSerializer也会默认调用。
内容的提问来源于stack exchange,提问作者Asliddin Mahmudov
相关产品推荐
相关产品推荐

