Я пытаюсь, чтобы в моем URL была указана категория и название продукта. Вместо того, чтобы использовать ForeignKey
, чтобы назначить категорию для продукта, я выбрал ManyToManyField
, потому что некоторые продукты принадлежат нескольким категориям. Если я нахожусь, чтобы сказать http://127.0.0.1:8000/products/shirts/tshirt/
. Я получаю Invalid field name(s) given in select_related: 'category'. Choices are: (none)
. Я также получаю сообщение об ошибке при вводе go на страницу сведений о категории, например http://127.0.0.1:8000/products/shirts/
.
Reverse for 'model_detail_view' with arguments '('', 'tshirt')' not found. 1 pattern(s) tried: ['products/(?P<category_slug>[^/]+)/(?P<model_slug>[^/]+)/$']
models.py
class Product(models.Model):
title = models.CharField(max_length=80)
category = models.ManyToManyField(Category)
model_slug = AutoSlugField(null=True, default=None,
unique=True, populate_from='title')
class Meta:
verbose_name_plural = "Products"
def __str__(self):
return self.title
views.py
def model_category_detail_view(request, category_slug):
category = get_object_or_404(Category, category_slug=category_slug)
context = {
"products": Product.objects.filter(category__category_slug=category_slug),
}
return render(request=request,
template_name='main/category_detail.html', context=context)
def model_detail_view(request, category_slug, model_slug):
products = Product.objects.select_related('category').get(
category__category_slug=category_slug, model_slug=model_slug)
context = {
"products": products,
}
return render(request=request, template_name='main/model_detail.html', context=context)
urls.py
path("products/<str:category_slug>/<str:model_slug>/", views.model_detail_view, name="model_detail_view"),
шаблон
{% for product in products %}
<a class="btn btn-outline" href="{% url 'main:model_detail_view' product.category.category_slug product.model_slug %}"><i class="fa fa-arrow-circle-right"></i>View Model</a>
{% endfor %}