Сортировка элемента хранилища данных по auto_now = True и auto_now_add = True - PullRequest
0 голосов
/ 12 ноября 2010

Я пытаюсь отсортировать элемент в хранилище данных по возрасту, используя 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)

И вот что я использую в шаблоне Мако:

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

Спасибо!

1 Ответ

1 голос
/ 12 ноября 2010

Сверху моей головы, похоже, что вы вычисляете mAGE только при получении записей, т.е. после выполнения запроса. Разве вы не должны вычислять его всякий раз, когда изменяете объект, прежде чем поместить его в хранилище данных?

До этого, однако, вы уверены, что это то, что вы хотите сделать? mAGE будет временем между последним изменением каждой записи и созданием записи. Это кажется странной вещью. Если вы хотите отсортировать по фактическому возрасту записи (время с момента создания), используйте mDATE0 для сортировки. Или, если вы хотите отсортировать по последним изменениям, используйте mDATE.

Для сортировки в обратном порядке используйте QUERY3.order("-mDATE") (обратите внимание на дефис).

...