Изменить вывод столбца для sqlform.grid () в Web2py - PullRequest
2 голосов
/ 13 марта 2012

Я начал использовать web2py для веб-приложения и пытаюсь использовать SQLFORM.grid(...) для отображения разбитого на страницы списка одной из данных моей db-таблицы, как в следующем минимальном примере.

grid=SQLFORM.grid(query,
    links=links,
    fields=[db.example.date,db.example.foo, db.example.bar])

The *Поле 1005 * содержит объект datetime.datetime Python в формате UTC.На данный момент это отображается просто так.Тем не менее, я хочу иметь больше контроля над фактическим выходом, чтобы я мог установить местный часовой пояс и изменить строку вывода, чтобы иметь что-то вроде «2 часа назад».

Как видно из другого вопроса [0], я могу использовать links для вставки новых столбцов.К сожалению, я не могу отсортировать строки по полю, которое я вставил таким образом.Кроме того, они вставляются справа вместо фактической замены моего первого столбца.Так что это не похоже на решение.

Подводя итог: Как мне получить контроль над тем, как db.example.date распечатывается в конце?

[0] Рассчитанные поля в web2py sqlgrid

Ответы [ 3 ]

4 голосов
/ 13 марта 2012

Вы можете достичь своей цели, когда определите таблицу в своей модели. Параметр представления в конструкторе поля, который вы использовали в define_table, будет распознан SQLFORM.grid. Например, если вы хотите просто напечатать дату с названием месяца, вы можете добавить в модель следующее:

Field('a_date', type='date', represent=lambda x, row: x.strftime("%B %d, %Y")),

Ваша функция также может быть преобразована в местное время.

0 голосов
/ 21 февраля 2017

Если вы не хотите, чтобы дата всегда отображалась таким образом, как указано в ответе Дэвида Нейма.Непосредственно перед созданием сетки вы можете установить db.table.field.represent в контроллере.

db.example.date.represent = lambda value, row: value.strftime("%B %d, %Y")

, а затем.

grid = SQLFORM.grid(query,....

Я часто использую это, когда присоединяюсь к таблицам,Если в представлении есть файл row.field из файла модели, он разбивается, поскольку он должен быть более конкретным, row.table.field.

0 голосов
/ 20 декабря 2015

Вам необходимо использовать prettydate, чтобы изменить формат даты и времени в гуманизированной строке и вызвать его в параметре представления вашего дескриптора Field ().Например:

from gluon.tools import prettydate
db.example.date.represent = lambda v,r: prettydate(r.date)

Таким образом, любое отображение db.example.date будет отображаться гуманизированным, в том числе через SQLFORM.grid

...