首页 > 解决方案 > url中有两个slug

问题描述

我想要一个需要 2 个 slug 的 url 模式。我试图让它看起来像http://127.0.0.1:8000/category/model,但我很难理解如何做到这一点。

以下是我到目前为止的内容:

模型.py

def model_detail_view(request, category_slug, model_slug):
        model = Model.objects.get(
        category__slug=category_slug, model_slug=model_slug)
    context = {
        "model": model,
    }
    return render(request=request, template_name='main/model_detail.html', context=context)

网址.py

path("<str:category_slug>/<str:model_slug>/", views.model_detail_view, name="model_detail_view"),

模型.py

class Category(models.Model):
    title = models.CharField(max_length=50)
    featured_image = models.ImageField(upload_to="categories")
    category_slug = AutoSlugField(null=True, default=None,
                         unique=True, populate_from='title')

    class Meta:
        verbose_name_plural = "Categories"

    def __str__(self):
        return self.title

class Model(models.Model): 
    title = models.CharField(max_length=80)
    category = models.ManyToManyField(Category)
    featured_image = models.ImageField(upload_to=image_dir)
    model_slug = AutoSlugField(null=True, default=None,
                         unique=True, populate_from='title')

    class Meta:
        verbose_name_plural = "Models"

    def __str__(self):
        return self.title

标签: djangodjango-modelsdjango-views

解决方案


尝试这个,

model = model = Model.objects.get(category__category_slug=category_slug, model_slug=model_slug)


参考:

  1. Django:跨越关系的查找---(Django Doc)

推荐阅读