【问题标题】:Dango Filter - Filter DateTime ValueDango 过滤器 - 过滤日期时间值
【发布时间】:2020-12-29 18:17:30
【问题描述】:

我有 json 日期时间 像这样

{
    "datetime": "2020-09-11 11:09:52",
}

我尝试过滤它是这样的

localhost:8000/api/v1/history?datetime=2020-09-11%2011:09:52。

Here what i tried

class AuditlogFilter(filters.FilterSet):
    datetime = filters.DateTimeFilter(method="datetime_filter")

    class Meta:
        model = CRUDEvent
        fields = ['datetime']

    def datetime_filter(self, queryset, name, value):
        return queryset.filter(Q(datetime__icontains=value))

但是我得到了空值。有没有办法我可以归档它???

提前谢谢...

【问题讨论】:

  • 您是否也可以在使用此过滤器类的地方添加views.py,而现在您为什么要尝试按这种情况进行过滤Q(datetime__icontains=value?您想获得在确切日期时间创建的 CRUDEvent 吗?我建议您在 start_datetime 和 end datetime 等时间范围内进行过滤
  • 是的,就是这样。 @BakhtiyarBekbergen
  • 您只想获得一个项目或项目列表?我想如果有几个对象,例如,得到对象的结果列表会很好,按范围过滤会很好
  • 你能给我提供任何方法吗??
  • start_datetime = django_filters.DateTimeFilter(field_name='datetime', lookup_expr='gte') end_datetime = django_filters.DateTimeFilter(field_name='datetime', lookup_expr='lte') 然后将这些字段添加到元类内的字段列表中

标签: django django-rest-framework django-filter


【解决方案1】:

filters.py

class AuditlogFilter(filters.FilterSet):
    start_datetime = filters.DateTimeFilter(field_name='datetime',
                                            lookup_expr='gte')
    end_datetime = filters.DateTimeFilter(field_name='datetime',
                                          lookup_expr='lte')

    class Meta:
        model = CRUDEvent
        fields = ('start_datetime', 'end_datetime')

views.py

class CRUDEventView(viewsets.ReadOnlyModelViewSet):
    serializer_class = serializers.CRUDEventSerializer
    queryset = CRUDEvent.objects.all()
    filterset_class = AuditlogFilter

不知道为什么你的过滤器类与模型类不同

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 2016-07-20
    • 2020-05-28
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 2012-08-10
    • 2015-10-18
    相关资源
    最近更新 更多