我正在使用Django Rest Framework并定义我的Serializer类。 Serializer类正在验证的输入包含两个字段,如下所示:
"absolute_date_range":{
"start":...,
"end":...,
}
"relative_date_range"="last_7"
用户可以选择传递其中一项或两项。但是必须至少存在其中一项。如果没有,则应该导致验证错误。
required=True
条件仅适用于单个字段。如果我使用自定义逻辑来执行此操作,那是放置此逻辑的最佳位置-串行器或in a Custom Field或Field level validation?
如何在我的序列化程序中强制执行此操作?
答案 0 :(得分:2)
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"PostgresConnection": "host=postgres_imdb_id_db; Username=postgres; Port=5432; Database=ImdbIds;"
}
}
这对您来说是更好的解决方案
答案 1 :(得分:0)
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
开始和结束日期应设置为 required=False
,因为它们都不是总是必需的。之后,在 validate()
函数中,您应该使用 .get()
函数获取值,以防止因缺少键而引发 KeyError()
。