У меня проблема в том, что я не могу получить информацию о продукте по категориям.
У меня проблема в том, что я не могу получить подробную информацию о продукте по категориям. Потому что 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
для обоих случаев.