2010-09-19 4 views
2

Editer: Résolu en utilisant la touche = lambda et apprendre ce que je suis en train de faire.order ("- modified") avec geomodel

Avec gemodel comme

class A(GeoModel,search.SearchableModel): 

Je suis en train de commander par jour à l'aide db.GeoPt pour stocker google maps coordonnées avec GAE et je peux géomodèle carte et correspondance. Mais order ("- modified") ne fonctionne pas. Il n'y a pas de trace. Toutes les idées sont les bienvenues. Le code qui devrait tri est

a = A.proximity_fetch(A.all().filter("modified >", 
timeline).filter("published =", True).filter("modified <=", 
bookmark).order("-modified") ,db.GeoPt(lat, lon),max_results=PAGESIZE 
+1, max_distance=m) 

Tous les paramètres semblent fonctionner, sauf ordre ("- modifié")

Essayer la manière suggérée le tri avec lambda je reçois un message « TypeError: lambda() prend exactement 1 argument (2 donné) "

a = A.proximity_fetch(A.all().filter("modified >", timeline).filter("published =", True).filter("modified <=", bookmark).order("-modified") ,db.GeoPt(lat, lon),max_results=40, max_distance=m) 
a = sorted(a, lambda x: x.modified, reverse=True) 

Répondre

5

GeoModel trie le résultat le plus proche du point le plus éloigné du point. Vous devez trier votre résultat avec python après avoir exécuté proximity_fetch:

result = sorted(result, key=lambda x: x.modified, reverse=True) 

Modifié: oubliez pas d'utiliser l'argument « clé » est pour trié

+0

Merci beaucoup! J'essaie de cette façon obtenir le message TypeError: () prend exactement 1 argument (2 donné) heureux d'avoir une trace maintenant –

+0

Oui, mes excuses, j'ai fait une erreur. La déclaration de triée est 'trié (itérable [, cmp [, touche [, inverse]]]) Donc, vous avez raison, vous devez utiliser 'key = lambda'. – sahid

5

GeoModel effectue plusieurs requêtes et combine les résultats en un seul jeu de résultats. Chaque requête doit être exécutée avec votre ordre de tri, mais les résultats finaux ne peuvent pas être triés en fonction de cet ordre. Le tri des résultats en mémoire est probablement suffisant pour surmonter cela.

+0

Merci Nick pour l'information. J'essaye de trier en mémoire à la place. –