Как создать набор запросов для отображения продуктов, связанных с категорией, отображаемой каждой категорией? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть модель продукта и модель категории продукта. Продукты связаны с категорией продукта атрибутом категории. Я хочу создать запрос, отображающий ТОЛЬКО продукты, относящиеся к категории, когда веб-страница отображается для этой конкретной категории.

При настройке моих представлений я получаю ошибку атрибута, говоря о представлении. не имеет атрибута слаг.

Модели:

class ProductCategory(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField()
    parent = models.ForeignKey('self', blank=True, null=True,
                related_name='children', on_delete=models.PROTECT)

class Product(models.Model):
    title       = models.CharField(max_length=100)
    category    = models.ForeignKey(ProductCategory, related_name='ProductsCategory', null=True, blank=True,
                    on_delete=models.CASCADE)
    slug        = models.SlugField(blank=True)
    description = models.TextField()
    price       = models.DecimalField(decimal_places=2, max_digits=6)
    image       = models.ImageField(upload_to='products/', null=True, blank=True)

Просмотры:

class ProductListView(ListView):
    look_up = 'slug'
    template_name = 'products/products.html'

    def get_queryset(self, *args, **kwargs):
        category = ProductCategory.objects.get(self.slug)
        products = Product.filter(category=category)
        return products

URL:

urlpatterns = [
    path('', CategoryView.as_view(), name='shop'),
    path('<slug:product_category>/', ProductListView.as_view(), name='products'),
    path('<slug:product_category>/<slug:product>/', ProductDetailView.as_view(), name='detail'),
]

1 Ответ

1 голос
/ 10 октября 2019

Попробуйте что-то вроде следующего, это поможет вам увидеть ваши URL, но это должно приблизить вас.

class ProductListView(ListView):
    template_name = 'products/products.html'

    def get_queryset(self, *args, **kwargs):
        category = ProductCategory.objects.get(slug=self.kwargs.get('product_category'))
        products = category.ProductsCategory.all()
        return products
...