DateTime fi的Django过滤器问题

2024-09-28 03:19:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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中获取日期戳并过滤它。 但现在我需要创建一个新的过滤器来显示服务器模型,它在过去两个小时内进行了更新。 我该怎么做?在

我会尝试类似的方法,但过滤器坏了,它显示所有项目:

^{pr2}$

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


Tags: djangonameapi应用程序过滤器servertypelookup
1条回答
网友
1楼 · 发布于 2024-09-28 03:19:58

在这种情况下,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']

你可以在视图中使用更新后的“最后两个小时”,如下所示?更新的_last_two\u hours=真

相关问题 更多 >

    热门问题