0

auto_now=Trueと を使用して、データストア内のアイテムを年齢別に並べ替えようとしていますauto_now_add=True。なんとかdatetime問題を解決できましたが、年齢で正しく並べ替えることができません。提案をいただければ幸いです。(大文字の変数で申し訳ありません。最終的には修正します。) 私のモデルは次のとおりです。

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()   

クエリは次のとおりです。

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

そして、これは私がMakoテンプレートで使用するものです:

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

そして、これは悪いソートの出力の例です:

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

ありがとう!

4

1 に答える 1

1

mAGE頭から離れると、レコードを取得するとき、つまりクエリを実行したにのみ計算しているように見えます。オブジェクトをデータストアに入れる前に、オブジェクトを変更するたびに計算するべきではありませんか?

その前に、それがあなたがやりたいことだと確信していますか?mAGE各レコードを最後に変更してから、レコードが作成されるまでの時間になります。それを整理するのは奇妙なことのようです。レコードの実際の経過時間(作成からの時間)で並べ替える場合は、を使用mDATE0して並べ替えます。または、最新の変更で並べ替える場合は、を使用しますmDATE

逆に並べ替えるには、を使用しますQUERY3.order("-mDATE")(ハイフンに注意してください)。

于 2010-11-12T18:24:31.713 に答える