Dynami c URL-адреса get_queryset в ListView - PullRequest
0 голосов
/ 06 февраля 2020

Я не совсем понимаю, как правильно переопределить get_queryset. Я хочу отобразить все категории, используя Product.objects.filter (availableible = True), но при нажатии отобразить продукты, относящиеся к соответствующей категории. Я прочитал это руководство , но мне все еще нужна помощь. Старая версия представлений, основанная на функциях:

# views
def product_list(request, category_slug=None):
    category = None
    categories = Category.objects.all()
    products = Product.objects.filter(available=True)
    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        products = products.filter(category=category)
    return render(request,
                  'shop/product/list.html',
                  {'category': category,
                   'categories': categories,
                   'products': products})

Новая версия на основе generi c .ListView:

class ProductView(generic.ListView):

    categories = Category.objects.all()

    def get_queryset(self):
        self.category = Category.objects.filter(**Here I don't know wright code**)
        return Product.objects.filter(available=True)

    def get_context_data(self, **kwargs):
        context = super(ProductView, self).get_context_data(**kwargs)
        context['categories'] = self.categories
        #context['category'] = self.category

# urls
urlpatterns = [
    path('', views.ProductView.as_view(), name='products'),
    path('categories/<slug:category_slug>/',
            views.ProductView.as_view(),
            name='product_list_by_categories'),]

И html:

        <h1>{% if category %}{{ category.name }}{% else %}Products{% endif %}</h1>
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...