[英]Annotate a django query via a reverse relationship
我有兩個模型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聚合 ,因為我認為這是一個類似的問題,但我發現這會返回一個空的查詢集。
感謝任何人都能提供的幫助。
編輯:
我跑的查詢是:
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源代碼,我無法真正推測為什么會發生這種情況。
您發布的代碼應該可以工作 - 在任何情況下,它都不應該返回空的查詢集,因為注釋不會影響主查詢的過濾。
愚蠢的問題,但你確定數據庫中有屬性元素嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.