首页 > 解决方案 > 尽管在 views.py 中设置了 get_queryset 函数,但我的对象没有被过滤

问题描述

我想制作一个 api 来从已发布的博客文章列表中获取博客的详细视图。为了解决这个问题,我使用 get_queryset() 过滤器来解决这个问题,但它只是返回所有列表,即没有过滤器起作用。

我使用了如下所示的代码:

模型.py

class BlogModel (models.Model) :
    heading = models.CharField(max_length=254)
    blog = models.TextField()
    author = models.CharField(max_length=254)

视图.py

class BlogRetrieveView(generics.RetrieveUpdateDeleteAPIView):
    serializer_class=BlogListSerializer
    queryset=BlogModel.objects.all()
    lookup_field='blog_id'

    def get_queryset(self,*args, **kwargs):
        return BlogModel.objects.filter(
            blog__id=self.kwargs['blog_id']

序列化程序.py

class BlogListSerializer(serializers.ModelSerializer):
    class Meta:
        model = BlogModel
        fields = '__all__'

网址.py

 url(r'^blog/(?P<blog_id>\d+)/$',BlogRetrieveView.as_view()),

我得到以下输出:

这显示了列表中显示的 7 篇博文中的 1 篇。 显然,没有应用过滤器。

编辑 1:根据给定的建议,我在 localhost 上的代码可以正常工作,但生产网站仍然停留在上述问题中提到的情况。背后的原因是什么?

标签: pythonpython-2.7filterdjango-rest-frameworkdjango-1.11

解决方案


我认为你应该删除lookup_fieldget_queryset()BlogRetrieveView 并将网址更改为url(r'^blog/(?P<pk>\d+)/$',BlogRetrieveView.as_view())


推荐阅读