У меня проблема в том, что я не могу получить информацию о продукте по категориям.

У меня проблема в том, что я не могу получить подробную информацию о продукте по категориям. Потому что Viwes содержит две переменные, и я не могу заставить их показывать детали продукта

Модель

from django.db import models

# Create your models here.

class Category(models.Model):
    name = models.CharField(max_length=200)
    slug = models.CharField(max_length=200)


def __str__(self):
    return self.name

class Product(models.Model):
    Category = models.ForeignKey(Category, on_delete=models.CASCADE)
    name = models.CharField(max_length=200, null=False, blank=False)
    slug = models.CharField(max_length=200, null=False, blank=False)
    description = models.TextField(max_length=350, null=False, blank=False)
    image = models.ImageField( null=False, blank=False)
    quantity = models.IntegerField(null=False, blank=False)


def __str__(self):
    return self.name

Урлы

path('category/<str:product_category_slug>/<str:product_slug>/', views.product_detail, name="product-detail")

Вивес

def product_detail(request, product_category_slug=None, product_slug=None):
    #How do I get product details through this path that contains a category and then the product

Надеюсь, кто-нибудь сможет мне помочь

def product_detail(request, product_category_slug, product_slug):
    product = Product.objects.get(slug=product_slug, Category__slug=product_category_slug)
    if product:
       return product
    else: 
       return "Product not found"

Надеюсь, это вернет объект Project с категорией. Для получения информации о категории, допустим, вы хотите получить название категории и ее slug, вы можете сделать следующее: название категории будет product.Category.name, а slug будет product.Category.slug

Вы можете сделать это так

def get_product_details(request, category_slug, slug):
    # Change <Category> field name to <category> 
    product = get_object_or_404(Product, category__slug=category_slug, slug=slug)
    context = dict(product=product)
    return response(response, "product_detail.html", context)

или так:

def get_product_details(request, category_slug, slug):
     try:
          product = Product._default_manager.get(category__slug=category_slug, slug=slug)
     except Product.DoesNotExist:
          product = None
    context = dict(product=product)
    template_name = "product_404_template.html" if product is None else "product_detail.html"
    return response(response, template_name, context)

Вы по-прежнему должны 404 для обоих случаев.

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