2010-11-12 4 views
2

J'essaie d'obtenir la liste des noms de magasins distincts dans la liste des soumissions.Django: L'utilisation de .distinct() sur une requête provoque une requête de base de données invalide

Mon modèle Django très simple:

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) 

Si je fais:
stores = Submission.objects.values_list('store_name', flat=True)
Ensuite, le résultat imprimé est très bien:
[u'amazon.com', u'amazon.com', u'amazon.com', u'buy.com']

Cependant - si j'ajoute .distinct() à la requête, alors je reçois Cette requête n'est pas supportée par la base de données.

Des idées sur pourquoi cela se produirait? J'ai joué avec l'utilisation de valeurs au lieu de valueslist sans la chance.

(Dernière version django, Python 2.6, OS X, Google App Engine)

+0

Pour alléger le problème un peu vous pouvez exécuter 'stores.query' d'impression et post la sortie sql brute ici! –

+0

SELECT DISTINCT app_submission.store_name FROM app_submission – Eitan

Répondre

3

Google Appengine API Datastore support doen't fonctionnalité distinct. C'est ce que dit l'erreur, donc vous ne pouvez pas le faire.

Tout ce que vous pouvez faire est de filtrer des questions uniques après que vous allez chercher les résultats comme celui-ci:

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

merci, c'est une façon très pratique de résoudre le problème! – Eitan

+0

il semble que GAE supporte désormais DISTINCT https://developers.google.com/appengine/docs/python/datastore/gqlreference#Syntax –

Questions connexes