Не очень понимаю, как правильно переопределить get_query_set(). Нужно отобразить все категории на главной странице, но при переходе пользователя по ссылке на интересующую категорию, отображать только элементы входящие в эту категорию. Таблицы связаны. Нужна помощь, долго пытаюсь реализовать. Смотрел в
док, но безуспешно. Ниже код:
#models
class Category(models.Model):
name = models.CharField(verbose_name='Категория', max_length=100, db_index=True)
slug = models.SlugField(max_length=100, db_index=True,
unique=True)
...
def get_absolute_url(self):
return reverse('core:product_list_by_categories',
args=[self.slug])
class Product(models.Model):
vencode = models.CharField('Артикул', max_length=100, primary_key=True)
slug = models.SlugField(max_length=100, db_index=True)
describe = models.TextField('Описание', blank=True)
price = models.DecimalField('Цена', max_digits=20, decimal_places=2)
category = models.ForeignKey('Category', related_name='products', on_delete=models.SET_NULL,
null=True, verbose_name='Категория')
available = models.BooleanField(default=True)
class Meta:
index_together = (('vencode', 'slug'),)
def get_absolute_url(self):
return reverse('core:product_detail', args=[str(self.slug)])
def save(self, *args, **kwargs):
self.slug = slugify(self.vencode, allow_unicode=True)
super(Product, self).save(*args, **kwargs)
# urls
app_name = 'core'
urlpatterns = [
path('', views.ProductView.as_view(), name='products'),
path('categories/<slug:category_slug>/',
views.ProductView.as_view(),
name='product_list_by_categories'),]
#views
class ProductView(generic.ListView):
...
categories = Category.objects.
def get_queryset(self, category_slug=None):
self.category = None
if category_slug:
self.category = get_object_or_404(Category, slug=category_slug)
return Product.objects.filter(category=self.category)
return Product.objects.filter(available=True)
def get_context_data(self, **kwargs):
context = super(ProductView, self).get_context_data(**kwargs)
context['Products'] = self.form_class
context['categories'] = self.categories
#context['category'] = self.category
return context
#html
<h3>Categories</h3>
<li {% if not category %}class="selected"{% endif %}>
<a href="{{ categories.get_absolute_url }}">Все категории</a>
</li>
{% for c in categories %}
<li {% if categories.slug == c.slug %}class="selected"{% endif %}>
<a href="{{ c.get_absolute_url }}">{{ c.name }}</a>
</li>
{% endfor %}