我正在尝试使用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)
谢谢!
答案 0 :(得分:1)
在我的脑海中,看起来你只是在检索记录时计算mAGE
,即在执行查询后。在将对象放入数据存储区之前,您是否应该在修改对象时进行计算?
在此之前,您确定这是您想要做的吗? mAGE
将是您上次修改每条记录与创建记录之间的时间。这似乎是一件奇怪的事情。如果要按记录的实际年龄(创建后的时间)排序,请使用mDATE0
进行排序。或者,如果您想按最近的更改进行排序,请使用mDATE
。
要反向排序,请使用QUERY3.order("-mDATE")
(注意连字符)。