django - 如何验证在序列化/反序列化期间至少存在两个字段之一

标签 django validation serialization django-rest-framework deserialization

我正在使用 Django Rest Framework 并定义我的 Serializer 类。 Serializer 类正在验证的输入包含两个字段,如下所示:

"absolute_date_range":{
  "start":...,
  "end":...,
}

"relative_date_range"="last_7"

用户可以选择传递其中一项或两项。但至少必须有一项。如果不是,则应导致验证错误。

required=True 条件仅适用于单个字段。如果我使用自定义逻辑执行此操作,那么这是放置此逻辑的最佳位置 - 序列化程序或 in a Custom FieldField level validation

我如何在我的序列化程序中执行此操作?

最佳答案

class YourSerializer(serializers.Serializer)
    start = serializers.DateTimeField()
    finish = serializers.DateTimeField()

    def validate(self, data):
        """
        Validation of start and end date.
        """
        start_date = data['start']
        end_date = data['finish']
        if not start_date and not end_date:
            raise serializers.ValidationError("at least one date input required.")
        if other logic:
            other logic stuff
        return data

这对你来说是更好的解决方案

关于django - 如何验证在序列化/反序列化期间至少存在两个字段之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55108046/

相关文章:

javascript - AngularJS 注销和重新登录

Django GIS的coverby查询返回错误结果

python - Django 导入错误,URLS 和 ROOT_URLCONF 混淆

javascript - 如何从 jquery 的下拉列表中选择动态创建的文本框的验证?

jquery - 使用 Jquery 查找输入的 Foreach

ASP.NET CustomValidator 不工作

java - 无法序列化从通用特征派生的通用案例类

python - 原始 sql 查询和普通 sql 查询有什么区别?

java - 哪种键/值对序列化格式最适合在 RDBMS 中进行索引?

c# - 如何强制 Newtonsoft Json 序列化所有属性? (具有 "Specified"属性的奇怪行为)