我想只返回没有关联图像的项目。我的关系是这样的:
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)
我将以下查询放在一起以返回Photo不为空的Post实例:
posts=Post.objects.filter(photo__photo__isnull=False)
问题在于,它根据与Post实例相关的Photo实例的数量返回每个Post实例的多个副本。换句话说,一个帖子有5张照片,因此在查询集中返回五个副本。我查看了文档,这有点棘手。我最终使用distinct(),但我认为我可以立即使用它。
由于
答案 0 :(得分:8)
要返回没有关联照片的帖子,请使用以下查询:
posts=Post.objects.filter(photo__isnull=True)
您在问题的后面使用isnull=False
。正如您所说,生成的查询集将为每个附加到它的照片返回一次。要仅在查询集中包含每个帖子一次,请使用distinct。
posts=Post.objects.filter(photo__isnull=False).distinct()
我不确定您在查询中查询photo__photo__isnull
的原因 - 我的回答是假设您应该使用photo__isnull
。
答案 1 :(得分:1)
我不确定你的意思是“但我认为我可以让它立即起作用”,但使用distinct()或order_by()应该是你问题的解决方案。