Как получить слагов из разных моделей в URL, т.е. пути (//)? - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь получить шаблон ur, похожий на этот WWW.domain.com/slug1/slug2, где slug1 - это внешний ключ, к которому нужно подключиться.Думайте об этом как library.com//.Автор и книга - две разные модели, каждая со своим слагом.Есть ли способ, где я могу импортировать слаг от автора в подробный вид книги, а затем использовать его в URL для подробного просмотра книги?

Вот как я представляю себе путь, похожий на:

    path('brands/<slug:brand_slug>/<slug:model_slug>', views.Brand_ModelsDetailView.as_view(), name='model-detail'),

Это мои модели:

class Brand(models.Model):
    brand_name = models.CharField(
        max_length=50, help_text='Enter the brand name',)  
    slug = AutoSlugField(populate_from='brand_name', default = "slug_error", unique = True, always_update = True,)


    def get_absolute_url(self):
        """Returns the url to access a particular brand instance."""
        return reverse('brand-detail', kwargs={'slug':self.slug})

    def __str__(self):
        return self.brand_name

class Brand_Models(models.Model):
    name = models.CharField(max_length=100)
    brand = models.ForeignKey('Brand', on_delete=models.SET_NULL, null=True)
    slug = AutoSlugField(populate_from='name', default = "slug_error_model", unique = True, always_update = True,)


    def get_absolute_url(self):
        """Returns the url to access a particular founder instance."""
        return reverse('model-detail', kwargs={'slug':self.slug})

    def __str__(self):
        return self.name

Моя текущая попытка просмотра:

class Brand_ModelsDetailView(generic.DetailView):
    model = Brand_Models


    def get_queryset(self):
        qs = super(Brand_ModelsDetailView, self).get_queryset()
        return qs.filter(
            brand__slug=self.kwargs['brand_slug'],
            slug=self.kwargs['model_slug']
        )

РЕДАКТИРОВАТЬ:

class RefrenceDetailView(generic.DetailView):
   model = Refrence

   def get_queryset(self):
       qs = super(RefrenceDetailView, self).get_queryset()
       return qs.filter(
            brand__slug=self.kwargs['brand_slug'],
            model__slug=self.kwargs['model_slug'],
        slug = self.kwargs['ref_slug']
    )

1 Ответ

0 голосов
/ 11 февраля 2019

Ваша ошибка только с get_absolute_url методом Brand_Models;поскольку подробный URL-адрес занимает два слага, вам нужно передать их обоим reverse.

return reverse('model-detail', kwargs={'brand_slug': self.brand.slug, 'model_slug':self.slug})
...