web2py orderby datetime乱序

时间:2015-11-27 02:58:24

标签: datetime sql-order-by web2py

我在web2py中编写一个简单的Web应用程序,用于存储和检索数据库中的一些数据。为了按时间顺序保留条目,我的表有一个存储日期时间的属性。像这样:

db.define_table('tablename',
           Field( ....
           ....
           ....
           Field('created_on','datetime', default=request.now, writable=False),
           Field('last_modified','datetime', default=request.now, update=request.now),
           )

然后当我请求数据时,我将orderby属性设置为last_modified:

rows = db().select(db.tablename.ALL, orderby=db.tablename.last_modified)

然后,我将结果传递给Json字典对象。像这样:

I'm passing them into a JSON dictionary object.Like so: 



d = { r.index_id : {'index_id':r.index_id,
                                 ....
                                 ....
                                 'comments':r.comments,
                                 'created_on':r.created_on,
                                 'last_modified':r.last_modified}
          for r in rows}

    return response.json(dict(entry_dict=d))

当我从服务器得到响应时,我将dict返回到我的ractive对象。

MAIN.set('data_entries', data['entry_dict']);

然后,我将结果呈现为ractive:

{% #data_entries:index_id%}
              <tr class = "datarow" onclick="window.document.location='{% url+ '/'+ index_id %}';">
                  <td>{% index_id %}</td>
                  ....
                  <td>{% last_modified %}</td>
              </tr>
            {% /data_entries %}

然而,当数据返回到webapp时,我得到以下内容:

These are the time-stamps returned by the app looks like I have em in the wrong order. 我这样做了吗?

1 个答案:

答案 0 :(得分:1)

在Python中,词典不保留顺序,因此当您将d词典转换为JSON时,您不一定会按原始Rows对象的顺序获取键。您可以改为使用OrderedDict,但无论如何您似乎还不需要字典 - 只需创建一个列表(使用as_list方法):

    return response.json(dict(entry_dict=rows.as_list()))

然后在Ractive中,更改:

{% #data_entries:index_id %}

为:

{% #data_entries %}

您似乎不需要每个循环中的索引值。相反,您将能够访问每个记录的index_id字段作为该部分的数据上下文的一部分。