Фильтр в get_context_data и get_query_set не работает

У меня есть listview, в котором я пытаюсь отфильтровать продукты по категориям. Некоторые продукты имеют подкатегорию. Когда у продукта есть подкатегория, я хочу, чтобы просмотр списка отображал их по подкатегориям. Проблема в следующем: Просмотр списка отлично работает для товаров с подкатегорией, но не работает для товаров, у которых нет подкатегории. Где я ошибаюсь?

Модели:

class Category(models.Model):
    category_name = models.CharField(max_length=200)
    sub_category = models.CharField(max_length=200,blank=True,null=True)
    category_picture = ResizedImageField(upload_to='category/', null=True, blank=True)
    category_info = models.TextField(blank=True, null=True)
    category_video = models.CharField(max_length=250,blank=True, null=True)

    def __str__(self):
        if self.sub_category is None:
            return self.category_name
        else:
            return f" {self.sub_category}"

    class Meta:
        ordering = ['category_name']

class Bottle(models.Model):
    category_name = models.ForeignKey('Category', on_delete=models.SET_NULL,null=True,blank=True)
    brand = models.ForeignKey('Brand', on_delete=models.CASCADE)
    bottle_name = models.CharField(max_length=255)
    bottle_info = models.TextField()
    bottle_tasting_notes = models.TextField()
    bottle_barcode = models.IntegerField()
    bottle_image = ResizedImageField(upload_to='bottles/',null=True, blank=True)
    bottle_shop_link = models.CharField(max_length=250, null=True, blank=True)

    def __str__(self):
        return f"{self.brand}, {self.bottle_name}"
    
    class Meta:
        ordering = ['bottle_name']

Вид:

class BottlesByCategoryView(ListView):
    model = Bottle
    context_object_name = 'bottles'

    #Filter bij subcategory in the category model. If no subcategory exists, load by category_name
    def get_queryset(self):
        if Bottle.objects.filter(category_name__sub_category=self.kwargs['category']) is None:
            return Bottle.objects.filter(category_name__category_name=self.kwargs['category'])   
        else:
            return Bottle.objects.filter(category_name__sub_category=self.kwargs['category'])

    def get_context_data(self, **kwargs):
        context = super(BottlesByCategoryView, self).get_context_data(**kwargs)
        if Bottle.objects.filter(category_name__sub_category=self.kwargs['category']) is None:
            context['category_info'] = Category.objects.filter(category_name=self.kwargs['category'])
        else:
            context['category_info'] = Category.objects.filter(sub_category=self.kwargs['category'])
        return context

УРЛЫ:

path('BottlesByCategory/<str:category>/',BottlesByCategoryView.as_view(template_name='academy/bottlesByCat_list.html'),name='bottlesByCat_list'),

Могу ли я не использовать операторы if в get_context_data и get_query_set?

Вернуться на верх