【问题标题】:Can we make either of the serializer fields compulsory in the serializer class itself?我们可以在序列化器类本身中强制使用任何一个序列化器字段吗?
【发布时间】:2020-10-12 16:24:15
【问题描述】:

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

提前致谢:)

#serializers.py

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

【问题讨论】:

    标签: python-3.x django django-rest-framework django-serializer


    【解决方案1】:

    如果您想强制这两个字段中的任何一个,您可以使用 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
    
    

    【讨论】:

      【解决方案2】:

      我不知道你到底想做什么,但似乎是覆盖方法def create(self, validated_data) 和/或def update(self, instance, validated_data)

      您可以在此处查阅文档:https://www.django-rest-framework.org/api-guide/serializers/#saving-instances

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        相关资源
        最近更新 更多