`lookup_field` не работает на`ListAPIView`
Я создаю Reddit клон.
models.py
class Subreddit(models.Model):
owner = models.ForeignKey(Profile, on_delete=models.DO_NOTHING, null=True, blank=True, related_name='subreddits')
class Post(models.Model):
owner = models.ForeignKey(Profile, on_delete=models.DO_NOTHING)
title = models.CharField(max_length=300)
subreddit = models.ForeignKey(Subreddit, on_delete=models.CASCADE)
urls.py
urlpatterns = [
# API Views
# SUBREDDIT VIEWS
path('r/', ListSubreddits.as_view(), name='reddits'),
path('r/<int:r_id>/', DetailSubreddit.as_view(), name='reddits-detail'),
path('r/<int:r_id>/posts/', ListPostsOfReddit.as_view(), name='reddit-posts'),
]
ListPostsOfReddit
class ListPostsOfReddit(ListAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
lookup_field = 'subreddit__id'
lookup_url_kwarg = 'r_id'
У меня проблема с URL-адресом "reddit-posts". Этот URL пытается получить все конкретные subreddit, чьи id
указывается в URL как r_id
, Проблема здесь в том, что я получаю все сообщения, а не сообщения, относящиеся к этому subreddit. Так что, если у меня есть 2 сообщения в subreddit с id=1 и 3 сообщения с subreddit с id=2, если я пойду r/1/posts/
теоретически я должен получить только 2 сообщения, но практически все 5 сообщений я получаю. Я указал lookup_field
а также lookup_url_kwarg
но это не похоже на работу. Нужна помощь! Спасибо!
1 ответ
Видимо, в документах говорится, что вам нужно было бы написать фильтр для себя ListAPIView
, Смотрите также этот похожий вопрос.
В вашем случае это будет выглядеть так:
class ListPostsOfReddit(ListAPIView):
serializer_class = PostSerializer
def get_queryset(self):
return Post.objects.filter(subreddit__id=self.kwargs['r_id'])
Насколько я понимаю, документы для общих представлений API, lookup_field
а также lookup_url_kwarg
атрибуты используются только в подробных представлениях, а не в представлениях списка.