首页 > 解决方案 > 我们可以在序列化程序类本身中强制使用任何一个序列化程序字段吗?

问题描述

我有一个序列化程序类,我想主要使用它来获取请求数据并使用它来保存不同模型中的详细信息。我想在请求正文中包含一个或两个参数。我可以在我的 中处理它views.py,但我想知道有没有一种方法可以让我们在序列化程序类本身内部检查其中一个或两个?

提前致谢 :)

#serializers.py

class ScanUpdateSerializer(serializers.Serializer):
    assets = serializers.ListField(child=serializers.DictField())
    issues = serializers.ListField(child=serializers.DictField())

标签: python-3.xdjangodjango-rest-frameworkdjango-serializer

解决方案


如果您想强制这两个字段中的任何一个,您可以使用 validate 方法来检查并强制执行它。

例如

from rest_framework.exceptions import ValidationError


class ScanUpdateSerializer(serializers.Serializer):
    assets = serializers.ListField(child=serializers.DictField())
    issues = serializers.ListField(child=serializers.DictField())
    

    def validate(self, attrs):
        if not ("assets" in self.initial_data or "issues" in self.initial_data):
            raise ValidationError("Either assets or issues need to be set.")
        return attrs


推荐阅读