Django 使用ManyToManyField作为url中的slug

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')

我正在尝试让我的url包含产品的类别和名称。我没有使用
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访问产品的类别详细信息页面,我会得到一个错误。我更新了我的问题以包含更多代码