Django 使用ManyToManyField作为url中的slug
我正在尝试让我的url包含产品的类别和名称。我没有使用Django 使用ManyToManyField作为url中的slug,django,django-models,django-templates,django-views,Django,Django Models,Django Templates,Django Views,我正在尝试让我的url包含产品的类别和名称。我没有使用ForeignKey为产品指定类别,而是选择了ManyToManyField,因为有些产品属于多个类别。如果我导航到说http://127.0.0.1:8000/products/shirts/tshirt/。我在select_related:“category”中得到的字段名无效。选项包括:(无) 当我转到类别详细信息页面(如http://127.0.0.1:8000/products/shirts/ 未找到带有参数“(“'tshirt')
ForeignKey
为产品指定类别,而是选择了ManyToManyField
,因为有些产品属于多个类别。如果我导航到说http://127.0.0.1:8000/products/shirts/tshirt/
。我在select_related:“category”中得到的字段名无效。选项包括:(无)
当我转到类别详细信息页面(如http://127.0.0.1:8000/products/shirts/
未找到带有参数“(“'tshirt')”的“model\u detail\u view”的反向。尝试了1个模式:[“产品/(?P[^/]+)/(?P[^/]+)/$”]
型号.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
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)
path("products/<str:category_slug>/<str:model_slug>/", views.model_detail_view, name="model_detail_view"),
视图.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
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)
path("products/<str:category_slug>/<str:model_slug>/", views.model_detail_view, name="model_detail_view"),
url.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
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)
path("products/<str:category_slug>/<str:model_slug>/", views.model_detail_view, name="model_detail_view"),
path(“products//”,views.model\u detail\u view,name=“model\u detail\u 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 %}
{%用于产品中的产品%}
{%endfor%}
类别
是一个多对多字段,您应该将其传递给预回迁相关的
而不是您需要使用的m2m字段。谢谢。我现在可以直接访问产品页面,但是如果我使用hrefs访问产品的类别详细信息页面,我会得到一个错误。我更新了我的问题以包含更多代码