首页 > 解决方案 > 为什么要使用 UniqueTogetherValidator 而不是 Django 的默认验证行为?

问题描述

我定义了一个 Django 模型,其中定义了和unique_together之间的关系,如下所示:nameaddress

class Person(models.Model):
    name = models.CharField(max_length=255, default='', null=False)
    address = models.CharField(max_length=255, default='', null=False)

    class Meta:
        unique_together = ('name', 'address')

我还有一个 Django REST Framework 序列化程序,它UniqueTogetherValidator描述了与模型中定义的相同约束,如下所示:

class PersonSerializer(serializers.ModelSerializer):

    class Meta:
        model = Person
        fields = (
            'name', 'address',
        )
        validators = [
            UniqueTogetherValidator(
                queryset=Branch.objects.all(),
                fields=['name', 'address']
            )
        ]

UniqueTogetherValidator在测试此约束时,我注意到无论我是否已将其添加到 PersonSerializer,都会表现出完全相同的行为。无论我是否包含它(由于unique_together模型上的定义),都会返回相同的错误消息。

我的问题是:如果行为是在幕后执行的,那么在序列化程序上显式声明验证器的原因是什么?我确实注意到您可以更改错误消息,但这似乎是一个相当多的样板,仅用于处理违反unique_together约束的错误消息。是否有更广泛的理由使用我缺少的这些验证器类?

标签: pythondjangodjango-rest-framework

解决方案


推荐阅读