0
我以非常标准的方式使用Django筛选器。Django筛选器按钮
class TaksFilter(django_filters.FilterSet):
class Meta:
model = Task
fields = ['lastUpdated']
但我想创建自定义快速过滤器按钮。就像上个1天和最后7天一样,它本质上运行了这个查询集。
task = Task.objects.filter(lastUpdated__range=["2016-12-09", "2016-12-10"])
这是可以用Django的过滤器或我需要创建一个标准的POST或GET响应?
解决
感谢伊沃Donchev的帮助。使用你的代码,我解决了这个问题。因为我正在使用函数,所以我不想沿着基于类的视图的路线走。
form.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
view.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)
我知道我可以精简视图一点。下一个任务。
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
在模板标签:
谢谢,我添加了一点,但我会如何将其链接到一个按钮模板链接回该过滤器阙你定了吗? – Spinnaay
那么你可以使用链接它作为获取参数: –
我刚刚编辑帖子 –