python - django Rest框架如何验证对象列表?

标签 python django django-rest-framework

我已经知道 drf 有一个向 obejct 添加验证器的接口(interface),我有一个可以通过一个请求创建多个 Param 对象的 View ,我想验证是否有两个或多个对象的 namevalue 字段相同,如何验证序列化器中的对象列表?

模型.py

class Param(models.Model):
    name = models.CharField(max_length=256)
    value = models.CharField(max_length=256)

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

序列化器.py

class ParamSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.ParamKey
        fields = ['name', 'value']
        extra_kwargs = {
            'id': {
                'required': False,
            },
            'name': {
                'required': False,
            }
        }

View .py

class ParamViewSet(viewsets.ViewSet):

    def create(self, request):

        serializer = serializer.ParamKeySerializer(
            data=request.data, many=True)
        if serializer.is_valid():
            return Response()
        return Response()

最佳答案

您可以使用 ListSerializer 来实现此类功能。

ListSerializer 类提供同时序列化和验证多个对象的行为。您通常不需要直接使用 ListSerializer,而应该在实例化序列化器时简单地传递 many=True

引用请访问https://www.django-rest-framework.org/api-guide/serializers/#listserializer

class ParamListSerializer(serializers.ListSerializer):
    def validate(self, attrs):
        # Here attrs contains list of Params You can validate it here
        pass

    def create(self, validated_data):
        books = [Book(**item) for item in validated_data]
        return Book.objects.bulk_create(books)

class ParamSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.ParamKey
        fields = ['name', 'value']
        list_serializer_class = ParamListSerializer  # This specifies which list serializer class to user
        extra_kwargs = {
            'id': {
                'required': False,
            },
            'name': {
                'required': False,
            }
        }

    def validate(self, attrs):
        # enter your validations here
        pass

关于python - django Rest框架如何验证对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55175427/

相关文章:

Python 将 True False 矩阵转换为图像

javascript - 将逻辑放入 javascript 与主框架的一般准则

python - hier_block 的行为与 GNU Radio 中的sync_block 的行为究竟有何不同?

python - 运行开发服务器时在 Django 应用程序上列出超出范围的索引

django - Solr 与 Django-Haystack : 'Cannot create tester'

Django Rest Framework - 如何在 ListCreateAPIView 中 POST 外键

python - Django Rest Framework 自定义响应消息

python - 使用 Django Rest Framework 访问 'ManyRelatedManager' 上的不同字段?

python - 尝试/排除和决策

python - 在 Python 中使用 NLTK 方法进行释义