Django Представление на основе классов фильтрует кверисет, но не фильтрует?
У меня есть небольшая проблема с тем, как работает фильтр по дате:
Django представление на основе классов, начиная отсюда https://github.com/varlenthegray/wcadmin/blob/master/customer/views.py#L61
class CustomersCustomReport(generic.ListView):
model = Customer
template_name = 'customer/reports/custom_report.html'
def get_queryset(self):
from_date = self.request.GET.get('fromDate')
to_date = self.request.GET.get('toDate')
self.queryset = Customer.objects.filter(is_active=True)
if from_date:
from_date = datetime.strptime(from_date, '%m-%d-%Y').strftime('%Y-%m-%d')
print("Checking date from " + from_date)
self.queryset.filter(next_service__gte=from_date)
if to_date:
to_date = datetime.strptime(to_date, '%m-%d-%Y').strftime('%Y-%m-%d')
print("Checking date to " + to_date)
self.queryset.filter(next_service__lte=to_date)
return self.queryset
Я ожидаю, что это вернет отфильтрованный запрос на основе даты, которая является полем формы.
https://wcadmin.innovated.tech/customer/report/custom_report?fromDate=04-01-2022&toDate=04-30-2022
Я знаю, что эти данные не фильтруются, потому что весь список клиентов - это 521 запись из макетных данных, которые активны. Я следовал информации из этого вопроса: Как я могу фильтровать по диапазону дат используя Djangos Built in ListView?
Я знаю, что он получает данные из базы данных, я знаю, что он получает нужный мне диапазон дат из URL благодаря печати, и модель установлена на DateField для next_service, так что я не совсем уверен, что здесь происходит не так?
вам нужно лишь немного изменить:
def get_queryset(self):
from_date = self.request.GET.get('fromDate')
to_date = self.request.GET.get('toDate')
queryset = Customer.objects.filter(is_active=True) # change
if from_date:
from_date = datetime.strptime(from_date, '%m-%d-%Y').strftime('%Y-%m-%d')
print("Checking date from " + from_date)
queryset = queryset.filter(next_service__gte=from_date) # change
if to_date:
to_date = datetime.strptime(to_date, '%m-%d-%Y').strftime('%Y-%m-%d')
print("Checking date to " + to_date)
queryset = queryset.filter(next_service__lte=to_date) # change
return queryset # change