【问题标题】:Issue with django filters by DateTime filterDateTime过滤器的django过滤器问题
【发布时间】:2016-04-12 10:33:05
【问题描述】:

我有一个带有 API 的 django 应用程序。我创建了许多查询,例如:

class ShellMessageFilter(django_filters.FilterSet):
    created = django_filters.DateTimeFilter(name="created",lookup_type="gte")

    class Meta:
        model = Server
        fields = ['created']


class ServersDateList(ListAPIView):
    serializer_class = ServerSerializer
    queryset = Server.objects.all()
    filter_class = ShellMessageFilter

从 URL 中获取 Date stamp 并对其进行过滤。 但是现在我需要创建一个新的过滤器来显示过去两个小时更新的服务器模型。 我该怎么做?

我会尝试这样的事情,但过滤器坏了,它显示了所有项目:

class ShellMessageFilter2Hour(django_filters.FilterSet):

    import datetime

#    lastTwoHourDateTime = datetime.datetime.now() - datetime.timedelta(hours = 1)
#    last_update = django_filters.DateTimeFilter(name=str(lastTwoHourDateTime.strftime('%Y-%m-%d %H:%M')),lookup_type="gte")

#    last_update2 = datetime.datetime.now() - datetime.timedelta(minutes = 10)
#    last_update = last_update2.strftime('%Y-%m-%d+%H:%M')

    last_update = django_filters.DateTimeFilter("2016-04-23T15:31:50")
    created = django_filters.DateTimeFilter(name="last_update",lookup_type="gte")

    class Meta:
        model = Server
        fields = ['last_update']


class ServersDate2HourList(ListAPIView):
    serializer_class = ServerSerializer
    queryset = Server.objects.all()
    filter_class = ShellMessageFilter2Hour

请帮忙,我的错误在哪里?

【问题讨论】:

    标签: python django django-filter django-filters


    【解决方案1】:

    在这种情况下,MethodFilter 是您的朋友,可以让您为视图使用一个过滤器类。

    你可以这样实现:

    class ShellMessageFilter(django_filters.FilterSet):
        def updates_in_last_two_hours(self, value):
            # You can toggle the value between True and False
            if value == 'true':
                 right_now = datetime.datetime.now()
                 last_two_hours = right_now - datetime.timedelta(hours=2)
                 return self.filter(created__gte=last_two_hours)
            else:
                return self.filter()
        created = django_filters.DateTimeFilter(name="created",lookup_type="gte")
        updated_last_two_hours = django_filters.MethodFilter(
            action=updates_in_last_two_hours)
    
    class Meta:
        model = Server
        fields = ['created', 'updated_last_two_hours']
    

    然后您可以像这样在视图中使用 updated_last_two_hours ?updated_last_two_hours=true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-17
      • 2017-05-09
      • 2021-04-29
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      相关资源
      最近更新 更多