python - 通过反向关系注释一个django查询

标签 python django django-queryset

我有两个模型 PropertyImage , 通过外键关联,使得每个 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/

相关文章:

django - Django 中信号的性能

python - Django OR 复杂查询

python - 如何连接两个具有特殊条件的表

python - mypy 提示扩展基类的属性类型

python - 如何根据条件从其他数据框中替换一个数据框中的列值?

具有反向外键过滤功能的 Django Queryset

django - 新手 : Django : Adding calculated results to Queryset before passing to template

python - 选项卡在 Python 中无法正常工作

python - 生成 Django sitemap.xml : How to fix 'get_absolute_url' error

python - 为 Django REST 框架 API 客户端指定基本身份验证凭据