簡體   English   中英

通過反向關系注釋django查詢

[英]Annotate a django query via a reverse relationship

我有兩個模型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聚合 ,因為我認為這是一個類似的問題,但我發現這會返回一個空的查詢集。

感謝任何人都能提供的幫助。

編輯:

我跑的查詢是:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM