我有两个模型 Property
和 Image
, 通过外键关联,使得每个 Property
有多个 Image
实例.我正在尝试检索所有属性的查询集 - 列出所有字段 - 以及每个属性具有的图像数量。我知道我可以将此作为两个不同的查询来执行,但我不认为这是一种特别优雅的方法,并且证明效率有点低,因为此信息是通过 XMLHttpRequest 检索的。
模型定义如下:
class Property(models.Model):
title = models.CharField('title', max_length=255)
created = models.DateTimeField('created', auto_now_add=True)
modified = models.DateTimeField('modified', auto_now=True)
class Meta:
pass
class Image(models.Model):
prop_id = models.ForeignKey(Property)
image_file = models.ImageField('image file', upload_to='/path/to/image/')
class Meta:
pass
我遵循了这里发布的答案:Django Aggregation Across Reverse Relationship ,因为我相信这是一个类似的问题,但我发现这会返回一个空的查询集。
感谢任何人可以提供的帮助。
编辑:
我运行的查询是:
Property.objects.all().annotate(image_count=Count('image')).order_by('-image_count')
编辑 2:
经过一些实验,我找到了一个解决方案,尽管我很确定这属于错误/未记录的问题:
Property.objects.all().annotate(Count('image')).order_by('-image__count')
Property.objects.all().annotate(total_images=Count('image')).order_by('-total_images')
这些都有效,但将注释命名为 image_count
没有。如果不深入研究 Django 源代码,我无法真正推测为什么会这样。
最佳答案
您发布的代码应该可以工作 - 无论如何,它不应返回空查询集,因为注释不会影响主查询的过滤。
愚蠢的问题,但你确定数据库中有 Property 元素吗?
关于python - 通过反向关系注释一个django查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3369904/