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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:05:37