带有"isnull"参数的Django queryset返回重复项

Ben*_*Ben 4 sql django django-models django-queryset

我想只返回没有相关图像的项目.我的关系是这样的:

class Post(models.Model):
     ....fields


class Photo(models.Model):
    post=models.ForeignKey(Post,blank=True,null=True)
    photo=models.FileField(upload_to="pics")    


    def __unicode__(self):
        return str(self.post)
Run Code Online (Sandbox Code Playgroud)

我把以下查询放在一起以返回Photo不为null的Post实例:

    posts=Post.objects.filter(photo__photo__isnull=False)
Run Code Online (Sandbox Code Playgroud)

问题是,它根据与Post实例相关的Photo实例的数量返回每个Post实例的多个副本.换句话说,一个帖子有5张照片,因此在查询集中返回五个副本.我查看了文档,这有点棘手.我最终使用distinct(),但我认为我可以立即使用它.

谢谢

Ala*_*air 8

要返回没有关联照片的帖子,请使用以下查询:

posts=Post.objects.filter(photo__isnull=True)
Run Code Online (Sandbox Code Playgroud)

您正在使用的问题中稍后isnull=False.正如您所说,生成的查询集将为每个附加到它的照片返回一次.要仅在查询集中包含每个帖子一次,请使用distinct.

posts=Post.objects.filter(photo__isnull=False).distinct()
Run Code Online (Sandbox Code Playgroud)

我不确定你为什么查询photo__photo__isnull你的查询 - 我的答案假设你应该使用photo__isnull.