Я использую 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-filter или мне нужно создать стандартный ответ POST или GET?
Решено
Спасибо Иво Дончеву за помощь. Используя ваш код, я решил это так. Я не хотел идти по пути представлений на основе классов, поскольку я использую функции.
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)
Я знаю, что могу немного упростить вид. Следующая задача.