rit*_*att 3 django validation serialization deserialization django-rest-framework
我正在使用 Django Rest Framework 并定义我的 Serializer 类。Serializer 类正在验证的输入包含两个字段,如下所示:
"absolute_date_range":{
"start":...,
"end":...,
}
"relative_date_range"="last_7"
Run Code Online (Sandbox Code Playgroud)
用户可以选择传递其中之一或两者。但至少必须存在其中之一。如果不是,那么它应该会导致验证错误。
该required=True条件仅适用于单个字段。如果我使用自定义逻辑执行此操作,那么将此逻辑放入序列化程序或自定义字段或字段级验证中的最佳位置是哪个?
如何在我的序列化器中强制执行此操作?
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
Run Code Online (Sandbox Code Playgroud)
这对您来说是更好的解决方案
小智 5
IMO这是一个更好的解决方案:
class YourSerializer(serializers.Serializer)
start = serializers.DateTimeField(required=False)
end = serializers.DateTimeField(required=False)
def validate(self, data):
"""
Validation of start and end date.
"""
start_date = data.get('start', None)
end_date = data.get('end', None)
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
Run Code Online (Sandbox Code Playgroud)
应将开始日期和结束日期设置为,required=False因为这两个日期都不是必需的。之后,在validate()函数中,您应该使用.get()函数获取值,以防止KeyError()由于缺少键而引发。
| 归档时间: |
|
| 查看次数: |
3965 次 |
| 最近记录: |