2010-11-12 23 views
0

J'essaie de trier un article dans le magasin de données par âge en utilisant auto_now=True et auto_now_add=True. J'ai réussi à résoudre datetime problèmes mais je suis incapable de trier correctement selon l'âge. J'apprécie toutes les suggestions. (. Désolé pour les variables capitalisées, je les corriger par la suite) Mon modèle est:Tri du magasin de données par auto_now = Vrai et auto_now_add = Vrai

class Rep(db.Model): 
    mAUTHOR = db.UserProperty(auto_current_user=True) 
    mUNIQUE = db.StringProperty() 
    mCOUNT = db.IntegerProperty() 
    mDATE = db.DateTimeProperty(auto_now=True) 
    mDATE0 = db.DateTimeProperty(auto_now_add=True) 
    mWEIGHT = db.IntegerProperty() 
    mAGE = db.IntegerProperty() 

Query est:

QUERY3 = Rep.all() 
    QUERY3.filter("mAUTHOR =", user) 
    QUERY3.order("mAGE") 
    RESULTS3 = QUERY3.fetch(7) 

Et ce que je l'utilise dans le modèle Mako:

% for result in RESULTS3: 
     <% result.mAGE = int((result.mDATE - result.mDATE0).seconds) %> 
     <p>${result.mUNIQUE} (${result.mCOUNT}) (${result.mAGE})</p> 
    % endfor 

Et voici un exemple de sortie avec un mauvais tri:

mUNIQUE mCOUNT mAGE 
A  (11) (38604) 
C  (19) (5319) 
D  (10) (1797) 
E  (17) (2735) 
F  (16) (871) 

Merci!

Répondre

1

En haut de ma tête, il semble que vous ne calculez que mAGE lorsque vous récupérez les enregistrements, c'est-à-dire après en faisant la requête. Ne devriez-vous pas le calculer chaque fois que vous modifiez un objet, avant de le mettre dans le magasin de données?

Avant cela, êtes-vous sûr que c'est ce que vous voulez faire? mAGE sera le temps écoulé entre la dernière modification de chaque enregistrement et la création de l'enregistrement. Cela semble être une chose étrange à régler. Si vous voulez trier par l'âge réel de l'enregistrement (temps écoulé depuis la création), utilisez mDATE0 pour trier. Ou, si vous souhaitez trier les modifications les plus récentes, utilisez mDATE.

Pour trier à l'envers, utilisez QUERY3.order("-mDATE") (notez le trait d'union).