【问题标题】:Django DRF - How to use UniqueValidator?Django DRF - 如何使用 UniqueValidator?
【发布时间】:2022-06-30 03:33:54
【问题描述】:

我目前正在尝试在验证 drf 序列化程序时检查特定字段是否只出现一次:

from rest_framework.validators import UniqueValidator, UniqueTogetherValidator
...
class LiberaStorageSerializer(serializers.ModelSerializer):
    resource_name = serializers.CharField(required=True, write_only=True)
    ...

    class Meta:
        model = LiberaBackend
        fields = ('id', 'resource_name'...)
        validators = [
            UniqueValidator(
                queryset=LiberaBackend.objects.all(),
            )
        ]

这样做会导致以下执行:

AttributeError: 'LiberaStorageSerializer' 对象没有属性 'source_attrs'

但是为什么呢?我只想检查是否已经存在具有相同 resource_name 的 LiberaBackend 对象

另一方面,如果这样使用 UniqueTogetherValidator:

validators = [
    UniqueTogetherValidator(
        queryset=LiberaBackend.objects.all(),
        fields=['resource_name']
    )
]

我一点问题都没有,验证器返回:

字段资源名称必须是唯一的集合。 如果我想创建一个具有相同 resource_name 值的对象

对我来说这似乎是错误的,这里应该使用 UniqueValidator,知道怎么做吗?

提前致谢。

【问题讨论】:

    标签: python django-rest-framework


    【解决方案1】:

    好的,就这样解决了:

    resource_name = serializers.CharField(required=True, write_only=True, validators=[UniqueValidator(queryset=LiberaBackend.objects.all(),
                                            message=("Name already exists"))])
    

    【讨论】:

      【解决方案2】:
      from rest_framework.serializers import CharField
      from rest_framework.validators import UniqueValidator
      
      class RegionCreateSerializer(ModelSerializer):
      
         class Meta:
            model = Region
            fields = ('id','name','kml_file')
            read_only_fields = ['id',]
      
         name = CharField(
            max_length=150,
            validators=[UniqueValidator(queryset=Region.objects.all(), lookup='iexact')]
         )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-06
        • 2015-12-12
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        • 1970-01-01
        • 2013-11-15
        相关资源
        最近更新 更多