web2py orderby datetime 乱序

web2py orderby datetime out of order

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

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

当我从服务器得到响应时,我 return 向我的 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 %}

然而,当数据被 returned 到 webapp 时,我得到以下结果:

我这样做对吗?

在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 字段作为该部分数据上下文的一部分。