2010-11-12 98 views
2

我試圖在提交列表中獲取不同store_names的列表。Django:在查詢中使用.distinct()會導致無效的數據庫查詢

我很簡單的Django模型:

class Submission(models.Model): 
    title = models.CharField(max_length=50, null=True, blank=True) 
    description = models.CharField(max_length=200, null= True, blank=True) 
    store_name = models.CharField(max_length=200) 

如果我做的:
stores = Submission.objects.values_list('store_name', flat=True)
然後打印的結果是罰款:
[u'amazon.com', u'amazon.com', u'amazon.com', u'buy.com']

但是 - 如果我添加.distinct()到查詢,然後我得到該查詢不支持數據庫。

關於爲什麼會發生這種情況的任何想法?我玩過使用而不是valueslist沒有運氣。

(最新發布的Django,Python 2.6中,OS X,谷歌App引擎)

+0

爲了減輕這個問題了一點,你可以用'打印stores.query'和發佈原始SQL輸出這裏! – 2010-11-12 15:21:42

+0

SELECT DISTINCT app_submission.store_name FROM app_submission – Eitan 2010-11-12 19:15:42

回答

3

谷歌的AppEngine數據存儲API doen't支持distinct功能。這就是你所說的錯誤,所以你不能這樣做。

所有你能做的就是你獲取結果這樣的後過濾不是唯一的問題:

stores = Submission.objects.values_list('store_name', flat=True) 
unique_stores = [] 
for store in stores: 
    if store not in unique_stores: 
     unique_stores.append(store) 
+0

謝謝,這是一個解決問題的非常實用的方法! – Eitan 2010-11-12 19:16:47

+0

它看起來像GAE現在支持DISTINCT https://developers.google.com/appengine/docs/python/datastore/gqlreference#Syntax – 2013-02-04 07:54:08