MrLinch
@MrLinch
Just like coding...

Как сделать отображение related objects в отдельном ListView?

Добрый день!

Не могу понять как правильней сделать.

Припустим у нас есть такие модели:
class Post(models.Model):
    ...

class Comment(models.Model):
    ...
    post = models.ForeignKey(Post)

Для отображения списка постов используется:
class PostListView(ListView):
    model = Post


Комментарии к каждой записи должны отображаться на отдельной странице, например для поста с ID 2 это: /posts/2/comments/

На данный момент представление со списком комментариев выглядит так:
# views.py

class CommentListView(ListView):
    model = Comment
    
    def get_queryset(self):
        return Comment.objects.filter(post=self.kwargs.get('post_pk'))

# urls.py
url(r'^post/(?P<post_pk>\d+)/comments/$', CommentListView.as_view(), name='comment-list')


Вроде работает, но что делать если нужно организовать более сложную структуру. Например /countries/1/regions/3/city/2? Делать все ручками?
  • Вопрос задан
  • 253 просмотра
Решения вопроса 1
@deliro
Ну да. Остальное дописать ручками в get_context_data.
Кстати, советую заменить get_queryset на:
def get_queryset(self):
    return super().get_queryset().filter(post=self.kwargs.get('post_pk'))
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
svfat
@svfat
☺Нужен VPS? Два месяца бесплатно. Смотри профиль☺
Если я правильно вас понял, то для /countries/1/regions/3/city/2 в urls.py должно быть что-то вроде
url(r'^countries/(?P<country_id>\d+)/regions/(?P<region_id>\d+)/city/(?P<city_id>\d+)/$', MyListView.as_view(), name='my-list')


И переделать метод get_queryset соответственно
Ответ написан
Комментировать
pinkevich
@pinkevich
Developer
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы