`lookup_field` 不适用于 `ListAPIView`
`lookup_field` doesn't work on `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'
我遇到名为 'reddit-posts' 的 url 的问题。此 url 尝试获取所有特定的 subreddit,其 id
在 url 中指定为 r_id
。这里的问题是我得到了所有的帖子,而不是特定于那个 subreddit 的帖子。因此,如果我在 id=1 的 subreddit 中有 2 个帖子,在 id=2 的 subreddit 中有 3 个帖子,如果我转到 r/1/posts/
,理论上,我应该只获得 2 个帖子,但实际上我得到了所有 5 个帖子。
我指定了 lookup_field
和 lookup_url_kwarg
但这似乎不起作用。需要帮忙!谢谢!
显然,docs 说您需要自己为 ListAPIView
编写过滤。
另见 this similar question。
在你的情况下,它看起来像这样:
class ListPostsOfReddit(ListAPIView):
serializer_class = PostSerializer
def get_queryset(self):
return Post.objects.filter(subreddit__id=self.kwargs['r_id'])
据我了解 docs for the generic API views,lookup_field
和 lookup_url_kwarg
属性仅用于详细视图,不用于列表视图。
我正在创建一个 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'
我遇到名为 'reddit-posts' 的 url 的问题。此 url 尝试获取所有特定的 subreddit,其 id
在 url 中指定为 r_id
。这里的问题是我得到了所有的帖子,而不是特定于那个 subreddit 的帖子。因此,如果我在 id=1 的 subreddit 中有 2 个帖子,在 id=2 的 subreddit 中有 3 个帖子,如果我转到 r/1/posts/
,理论上,我应该只获得 2 个帖子,但实际上我得到了所有 5 个帖子。
我指定了 lookup_field
和 lookup_url_kwarg
但这似乎不起作用。需要帮忙!谢谢!
显然,docs 说您需要自己为 ListAPIView
编写过滤。
另见 this similar question。
在你的情况下,它看起来像这样:
class ListPostsOfReddit(ListAPIView):
serializer_class = PostSerializer
def get_queryset(self):
return Post.objects.filter(subreddit__id=self.kwargs['r_id'])
据我了解 docs for the generic API views,lookup_field
和 lookup_url_kwarg
属性仅用于详细视图,不用于列表视图。