2010-07-30 79 views
2

我有兩個模型PropertyImage,通過外鍵相關,使得每個Property有多個實例Image。我正在嘗試檢索所有屬性的查詢集 - 列出所有字段 - 以及每個屬性具有的圖像數量。我知道我可以做這兩個不同的查詢,但我不覺得這是一個特別優雅的方法,並且由於通過XMLHttpRequest獲取這些信息,所以證明它有點低效。註釋通過反向關係Django查詢

這些模型定義如下:

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的來源,我無法真正推測爲什麼會發生這種情況。

+0

我的答案(或另一個)從這個問題應該工作。你能發佈你運行的確切代碼嗎? – 2010-07-30 09:01:22

回答

1

您發佈的代碼應該可以工作 - 在任何情況下,它都不應該返回空的查詢集,因爲註釋不會影響主查詢的過濾。

愚蠢的問題,但你確定數據庫中有屬性元素?

+0

其中約200個,近9000個圖像對象,所以我不確定這裏發生了什麼。 – 2010-07-30 10:08:23

+0

接受,因爲你的回答(在另一個問題上)是正確的,並使我走上正確的軌道。謝謝。 – 2010-07-30 10:37:00