Почему шаблон не распознает поле моих моделей?
У меня есть приложение под названием ecommerce, и я уже создал базу данных. и все, что мне осталось сделать, это создать шаблон. В шаблоне я попытался создать динамическую панель навигации под названием "Categories"; Но когда я пишу "{{object.category}}" в цикле 'for', это не работает. Помогите, если знаете, где проблема, спасибо.
это моя модель:
from django.db import models
class CategoryManager(models.Manager):
def active(self):
return self.filter(status=True)
class ProductManager(models.Manager):
def published(self):
return self.filter(status='p')
class Category(models.Model):
name = models.CharField(max_length=200, verbose_name = "title")
slug = models.SlugField(max_length=100, unique=True, verbose_name = "slug")
status = models.BooleanField(default=True, verbose_name= "to be displayed?")
class Meta:
verbose_name = "category"
verbose_name_plural = "categories"
def __str__(self):
return self.name
objects = CategoryManager()
class Product(models.Model):
CURRENCY_CHOICES = (
('$', 'Dollar'),
('€', 'Euro'),
)
STATUS_CHOICES = (
('p', 'published'),
('d', 'drafted'),
)
name = models.CharField(max_length=200, unique=True, verbose_name="product")
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
description = models.TextField(null=True, verbose_name = "description")
thumbnail = models.ImageField(upload_to="images", verbose_name="image")
slug = models.SlugField(max_length=100, unique=True, verbose_name="slug")
price = models.DecimalField(decimal_places=2, max_digits=10)
currency = models.CharField(max_length=1, choices=CURRENCY_CHOICES, verbose_name="currency")
status = models.CharField(max_length=1, choices=STATUS_CHOICES, default="p", verbose_name="status")
newprice = models.DecimalField(decimal_places=2, max_digits=10, null=True, blank=True)
star = models.CharField(max_length=5, null=True, blank=True)
class Meta:
verbose_name = "product"
verbose_name_plural = "products"
ordering = ["-price"]
def __str__(self):
return self.name
objects = ProductManager()
вот мое мнение:
from django.shortcuts import render, get_object_or_404
from django.db import models
from django.contrib.auth.models import User
from .models import Product, Category
from django.views.generic import ListView, DetailView, TemplateView
class ProductList(ListView):
template_name = "blog/product_list.html"
model = Product
queryset = Product.objects.published()
class ProductDetail(DetailView):
def get_object(self):
slug = self.kwargs.get('slug')
return get_object_or_404(Product.objects.published(), slug=slug)
class PopularProductList(ListView):
template_name = "blog/popular_product_list.html"
model = Product
queryset = Product.objects.published()
class CategoryList(ListView):
template_name = "blog/category_list.html"
def get_queryset(self):
global category
slug = self.kwargs.get('slug')
category = get_object_or_404(Category.objects.active(), slug=slug)
return category.Products.published()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["category"] = category
return context
def about(request):
return render(request, "blog/about.html")
и это часть моего шаблона:
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container px-4 px-lg-5">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0 ms-lg-4">
<li class="nav-item"><a class="nav-link active" aria-current="page" href="{% url 'home' %}">Home</a></li>
<li class="nav-item"><a class="nav-link" href="{% url 'about' %}">About</a></li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">Categories</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
{% for object in object_list %}
<li><a class="dropdown-item" href="#">{{object.category}}</a></li>
{% endfor %}
</ul>
</li>
</ul>
</div>
</div>
</nav>