繁体   English   中英

Django-Rest-Framework 无法覆盖序列化程序唯一错误消息

[英]Django-Rest-Framework can't override serializer unique error_messages

我有以下 model:

class PersonDiscount(models.Model):
    user = models.OneToOneField('backend.Customer', related_name='discount', on_delete=models.CASCADE, error_messages={
        'unique': _('A discount setting is already set up for this customer.')})
    discount = models.IntegerField(default=0)
    discount_auto = models.IntegerField(default=0)
    auto = models.BooleanField(default=True)

    class Meta:
        ordering = ['-id']

以及 model 的以下串行器:

class PersonDiscountPostSerializer(serializers.ModelSerializer):
    class Meta:
        model = PersonDiscount
        fields = '__all__'
        extra_kwargs = {
            'user': {
                'error_messages': {
                    'unique': _('A discount setting is already set up for this customer.')
                }
            }
        }

当我尝试使用来自 api 的现有用户创建 PersonDiscount 实例时,我没有收到我在 model 和序列化程序中设置的自定义错误消息。

{
  "user": [
    "This field must be unique."
  ]
}

我已经在文档中查找过,找不到任何其他方法来理解为什么没有应用覆盖 error_messages。 我还多次重启了 django 运行服务器

希望有人可以帮助我解决这个问题

您可以手动验证唯一性,如下所示:

class PersonDiscountPostSerializer(serializers.ModelSerializer):

    user = serializers.PrimaryKeyRelatedField(
        required=True, 
        queryset=Customer.objects.all(),
    )

    def validate_user(self, value):
        exists = PersonDiscount.objects.filter(user=value).exists()
        if exists:
            raise serializers.ValidationError("err msg")
        return value

    class Meta:
        model = PersonDiscount
        fields = '__all__'
    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM