Не работает objects.filter django
почему не выполняется filter?
в браузере ссылка http://127.0.0.1:8000/orders/?category=simple
фильтр не делает выборку по list_orders = Orders.objects.filter(category__category=category_filter), отдает все записи, которые есть в базе, а не те, где только встречается эта категория
models
class Orders(models.Model):
device = models.CharField(max_length=150, verbose_name='Что ремонтируем')
category = models.ForeignKey('Category', default=1, on_delete=models.PROTECT, verbose_name='Категория', related_name='get_category')
def __str__(self):
return self.device
class Category(models.Model):
title = models.CharField(max_length=150, verbose_name='Наименования категории')
category = models.CharField(max_length=150, db_index=True, verbose_name='Категория')
def __str__(self):
return self.title
views
class OrdersHomeView(ListView):
model = Orders
paginate_by = 10
template_name = 'orders/orders_list.html'
context_object_name = 'orders'
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs)
category_filter = self.request.GET.get('category')
list_orders = Orders.objects.filter(category__category=category_filter)
paginator = Paginator(list_orders, self.paginate_by)
return context
Ответы (2 шт):
Автор решения: Andrew Holovko
→ Ссылка
Не работает objects.filter django
Работает. Проверено.
У вас метод возвращает контекст.
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(**kwargs) # вот это
category_filter = self.request.GET.get('category')
list_orders = Orders.objects.filter(category__category=category_filter)
paginator = Paginator(list_orders, self.paginate_by)
return context # вот туть
Возможно вам стоить поменять на return paginator?
Автор решения: Миша
→ Ссылка
Вы в get_context_data возвращаете context т.е context = super().get_context_data(**kwargs) и так как вы возвращаете context,то и выводится будет совсем другое.