Django简单查询过滤器

时间:2019-08-06 19:09:39

标签: django django-filter

尝试按登录用户过滤数据,但是代码导致显示所有用户数据,而不仅仅是显示用户创建的数据。我在这里想念什么? 序列化器没有问题。我想我这里缺少一些基本知识。

views.py

   class TimelinePostList(generics.ListCreateAPIView):
    serializer_class = TimelinePostSerializer
    def get_queryset(self):
        queryset = Timeline_Post.objects.all()
        user = self.request.user
        queryset.filter(author = user)
        return queryset

models.py

   class Timeline_Post(models.Model):
    slug = models.SlugField(max_length=200, unique=True)
    author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
    updated_on = models.DateTimeField(auto_now= True)
    text = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=0)

实际结果:

{
"count": 2,
"next": null,
"previous": null,
"results": [
    {
        "slug": "secon_post",
        "author": 8,
        "updated_on": "2019-08-06T18:47:43.915249Z",
        "text": "secon_post",
        "created_on": "2019-08-06T18:47:43.915249Z",
        "status": 0,
        "media": []
    },
    {
        "slug": "lkkej",
        "author": 5,
        "updated_on": "2019-08-06T18:04:11.175809Z",
        "text": "first Post",
        "created_on": "2019-08-06T18:04:11.175809Z",
        "status": 1,
        "media": []
    }
]

}

预期结果:

{
"count": 1,
"next": null,
"previous": null,
"results": [
    {
        "slug": "lkkej",
        "author": 5,
        "updated_on": "2019-08-06T18:04:11.175809Z",
        "text": "first Post",
        "created_on": "2019-08-06T18:04:11.175809Z",
        "status": 1,
        "media": []
    }
]

}

1 个答案:

答案 0 :(得分:1)

您的主要问题是您忘记了将过滤后的查询集分配回一个变量。另外,您可以立即按用户进行过滤。

class TimelinePostList(generics.ListCreateAPIView):
    serializer_class = TimelinePostSerializer

    def get_queryset(self):
        return Timeline_Post.objects.filter(author=self.request.user)
相关问题