【问题标题】:Sorting datastore item by auto_now=True and auto_now_add=True按 auto_now=True 和 auto_now_add=True 对数据存储项进行排序
【发布时间】:2010-11-12 17:38:29
【问题描述】:

我正在尝试使用 auto_now=Trueauto_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)

谢谢!

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore mako


    【解决方案1】:

    在我的脑海中,您似乎只是在检索记录时计算mAGE,即进行查询之后。在将对象放入数据存储之前,您不应该在修改对象时计算它吗?

    不过,在此之前,您确定这是您想要做的吗? mAGE 将是您上次修改每条记录与创建记录之间的时间。这似乎是一件奇怪的事情。如果要按记录的实际年龄(自创建以来的时间)排序,请使用mDATE0 进行排序。或者,如果您想按最近的更改排序,请使用 mDATE

    要反向排序,请使用QUERY3.order("-mDATE")(注意连字符)。

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2018-12-25
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多