根据模型中不存在的查询参数过滤请求

时间:2017-06-20 18:40:39

标签: python django django-rest-framework

我们有一个端点,可让您搜索两个日期之间的事件。

/events?start_time=X&end_time=X

事件是一个模型:

  • ID
  • 名称
  • EVENT_DATE

我们是否应该对View,Serializer或Model中的start_timeend_time参数进行验证?

我们希望确保包含start_time参数,end_time是可选的,并确保两者都是格式良好的日期。

视图中是否有自定义逻辑,或者是否有一组DRF(或Django)提供的帮助程序来执行此验证?

1 个答案:

答案 0 :(得分:1)

这是filtering,因此应该在视图中的查询集上完成。我猜也应该在那里验证这些数据。您可以使用专用的序列化程序来验证该数据(例如,在get_queryset中)。

但是,我建议使用django-filter,如果您需要验证,请注意。

也许像这样的过滤器:

from django_filters import rest_framework as filters

class EventFilterset(filters.FilterSet)
    start_time=filters.DateFilter(name='event_date', lookup_expr='gte')
    end_time=filters.DateFilter(name='event_date', lookup_expr='lte')

    class Meta:
        model=Events
        fields=['start_time', 'end_time']

我不确定您是否需要class Meta部分。

完整文档here