`lookup_field` не работает на` ListAPIView` - PullRequest
0 голосов
/ 25 июня 2018

Я создаю клон 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 пытается получить весь конкретный поддредит, чей id указан в URL как r_id. Проблема в том, что Я получаю все сообщения, а не сообщения, относящиеся к этому подредакту . Так что, если у меня есть 2 поста в subreddit с id = 1 и 3 поста с subreddit с id = 2, если я пойду на r/1/posts/, теоретически я должен получить только 2 поста, но практически я получаю все 5 постов. Я указал lookup_field и lookup_url_kwarg, но это не похоже на работу. Нужна помощь! Спасибо!

1 Ответ

0 голосов
/ 26 июня 2018

Очевидно, что документы говорят, что вам нужно было бы написать фильтрацию для 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 используются только в подробных представлениях, а не в представлениях списка.

...