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

Django-Rest-Framework 序列化器unique自定义错误消息不生效问题

问题原因

DRF 为ModelSerializer的OneToOneField自动生成UniqueValidator校验器时,默认使用内置的唯一错误提示,优先级高于你在模型字段、序列化器extra_kwargs中配置的自定义错误信息,因此自定义提示无法生效。

解决方案

方案1:显式指定校验器的错误消息

在序列化器中手动定义user字段,替换默认生成的校验规则,传入自定义错误消息:

from rest_framework import serializers
from rest_framework.validators import UniqueValidator
from .models import Customer, PersonDiscount

class PersonDiscountPostSerializer(serializers.ModelSerializer):
    user = serializers.PrimaryKeyRelatedField(
        queryset=Customer.objects.all(),
        validators=[
            UniqueValidator(
                queryset=PersonDiscount.objects.all(),
                message=_('A discount setting is already set up for this customer.')
            )
        ]
    )
    class Meta:
        model = PersonDiscount
        fields = '__all__'

方案2:手动编写校验逻辑(兼容性最强)

重写字段校验方法,主动判断重复,不受DRF自动校验逻辑影响,所有版本都适用:

from rest_framework import serializers
from .models import PersonDiscount

class PersonDiscountPostSerializer(serializers.ModelSerializer):
    class Meta:
        model = PersonDiscount
        fields = '__all__'
    
    def validate_user(self, value):
        if PersonDiscount.objects.filter(user=value).exists():
            raise serializers.ValidationError(_('A discount setting is already set up for this customer.'))
        return value

如果需要返回中文错误提示,直接将上述代码中message参数的内容替换为中文即可,修改完成后重启服务就能看到自定义错误提示生效。

内容的提问来源于stack exchange,提问作者Linh Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:45:06