【问题标题】:Relational condition check in Django Rest FrameworkDjango Rest Framework 中的关系条件检查
【发布时间】:2015-03-09 06:05:35
【问题描述】:

您好,我正在尝试验证 Django REST 框架 json 中至少需要一个字段。

这是我的序列化程序类

class WorkloadPutSerializer(serializers.Serializer):

    vdi = VdiSerializer(required = False)
    db = DbSerializer(required = False)
    vm= VmSerializer(required = False)
    pk = serializers.IntegerField(read_only=True)

我想强制用户输入vdivm 或两者。

有什么方法可以在 django rest 框架中验证这个条件。请帮帮我,我无法在 Django rest 框架文档中找到。

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    为什么不在序列化程序上覆盖validate()?见Object-level validation

    class WorkloadPutSerializer(serializers.Serializer):
    
        vdi = VdiSerializer(required = False)
        db = DbSerializer(required = False)
        pk = serializers.IntegerField(read_only=True)
    
        def validate(self, data):
            """
            Check if at least one of data['vdi'] or data['vm']
            exists and then return the data. Otherwise raise 
            ValidationError. 
            """
            if data['vdi'] or data['vm']:
                return data
            else:
                raise serializers.ValidationError("No No No")
    

    【讨论】:

    • 如果任一字段未传入,这将触发部分更新错误。您应该先检查该字段是否存在于数据中。
    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 2016-06-23
    • 2015-12-13
    • 2017-04-20
    • 2018-03-27
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    相关资源
    最近更新 更多