How to find object by its id in Django Rest Framework
django, django-rest-framework, python
Solution
If you really want to use `ListCreateAPIView`. You need to make some changes:
urls.py:
url(r'^blogpost/(?P<post_id>\w+)$', views.BlogPostList.as_view(),name='blogpost-list'),
views.py
class BlogPostList(generics.ListCreateAPIView):
serializer_class = BlogPostSerializer
permission_classes = (AllowAny,)
filter_class = BlogPostListFilter
paginate_by = 100
def get_queryset(self):
queryset = BlogPost.objects.filter(pk=self.kwargs['post_id'])
return queryset
But I think that Django Rest Framework provides better Class Based Views for your use case, such as `RetrieveAPIView`. As far as I understand, it seems that you just want to get an object, and this generic view is for a list of objects.
Problem
I can't have object by its id in Django Rest Framework. I have a such model: ``` class BlogPost(models.Model): title = models.CharField(max_length=128) content = models.TextField() created = models.DateTimeField(auto_now_add=True) ``` Then I write a serializer: ``` class BlogPostSerializer(serializers.ModelSerializer): class Meta: model = BlogPost fields = ('title', 'content', 'created') ``` In my `views.py` I have this: ``` class BlogPostListFilter(dajngo_filter.FilterSet): blog_post_id = django_filters.NumerFilter(name = 'id') class Meta: model = BlogPost fiields = ['blog_post_id'] class BlogPostList(generics.ListCreateAPIView): queryset = BlogPost.objects.all() serializer_class = BlogPostSerializer permission_classes = (AllowAny,) filter_class = BlogPostListFilter paginate_by = 100 ``` And such code in my urls: ``` url(r'^blogpost/$', ListCreateAPIView.as_view(model=BlogPost), name='blogpost-list'), ``` But when I write in browser http://example.com/blogpost/?blog_post_id=1 I have all objects