I am creating a reddit clone.
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'
I am having a problem with the url named 'reddit-posts'. This url tries to get all a particular subreddit whose id is specified in the url as r_id. The problem here is I am getting all the posts and not the posts specific to that subreddit. So if I have 2 posts in subreddit of id=1 and 3 posts of subreddit of id=2, if i goto r/1/posts/, in theory, I should get only 2 posts but practically I am getting all the 5 posts.
I have specified the lookup_field and lookup_url_kwarg but that doesn't seem to work. Need help! Thanks!
Apparently, the docs say that you would need to write the filtering yourself for
ListAPIView. See also this similar question.In your case, that would look like this:
As far as I understand the docs for the generic API views, the
lookup_fieldandlookup_url_kwargattributes are used only in the detail views, not the list views.