Django过滤器按钮

2024-10-03 04:28:41 发布

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

我用一种非常标准的方式使用Django过滤器。在

class TaksFilter(django_filters.FilterSet):
    class Meta:
        model = Task
        fields = ['lastUpdated']

但我想创建自定义快速过滤按钮。就像最后1天和最后7天,它们基本上运行这个查询集。在

^{pr2}$

这是可以用django过滤器完成的吗?还是需要创建一个标准的POST或GET响应?在

已解决

谢谢伊沃·唐切夫的帮助。用你的代码我就这样解决了。我不想走基于类的视图的路线,因为我在使用函数。在

在表单.py在

class TaskFilter(django_filters.FilterSet):
last_updated = django_filters.MethodFilter()

class Meta:
    model = Task
    fields = ['lastUpdated']

def filter_last_updated(self, value, queryset):
        qs = queryset.filter(lastUpdated__gte=datetime.now()-timedelta(days=value))
        return qs    

在视图.py在

def tasks(request):

    tasks = TaskFilter(request.GET, queryset=Task.objects.all())

    if request.method == "GET":    

        if '1' in request.GET:

            value = 1
            tasks = TaskFilter(request.GET, queryset=(TaskFilter.filter_last_updated(tasks, value, queryset=(Task.objects.all()))))

    context = {
    'tasks':tasks,
    }

return render(request, 'tasks.html', context)

我知道我可以简化一下视图。下一个任务。在


Tags: django视图taskgetvaluerequestfilterfilters
1条回答
网友
1楼 · 发布于 2024-10-03 04:28:41

是的,你可以用django过滤器,使用MethodFilter并实现名为filter的方法,你的文件名如下:

class TaksFilter(django_filters.FilterSet):
    last_updated = django_filters.MethodFilter()
    class Meta:
        model = Task

    def filter_last_updated(self, queryset, value):
        qs = queryset.filter(...)
        # your custom logic here using the passed value
        return qs

在模板中的标记中: “href='your'-网址:url.com?上次更新=某个值'”

在视图中:

^{pr2}$

相关问题 更多 >