Разобрать формат даты ISO 8601 в таблицах django2 - PullRequest
0 голосов
/ 06 сентября 2018

Я использую django tables2 , которая:

Обратите внимание, что в формате используется синтаксис тега шаблона даты Django.

В соответствии с дата Джанго ISO 8601 выбирается строкой формата 'c':

c ISO 8601 формат: 2008-01-02T10: 30: 00.000123 + 02: 00

Вот что я делаю:

import django_tables2 as tables

...

    created = tables.DateTimeColumn(format='c')

Но это не работает (столбец created в таблице показан пустым, признак проблем с синтаксическим анализом)

Это данные, поступающие от API:

"created": "2018-09-05T14:00:35.672433Z",

, который на самом деле исходит от DRF , который по умолчанию использует:

format - строка, представляющая формат вывода. Если не указано, по умолчанию используется то же значение, что и ключ настроек DATETIME_FORMAT, который будет 'iso-8601', если не установлен

Подводя итог, мой вопрос:

Как разобрать iso8601 с таблицами django2?

EDIT

Заполнение таблицы производится следующим образом:

import django_tables2 as tables
from django.utils.translation import ugettext as _


class ExpansionTable(tables.Table):
    human = tables.Column()
    created = tables.DateTimeColumn(format='c')
    size = tables.Column()
    description = tables.Column()
    output = tables.Column()

    class Meta:
        attrs = {'class': 'table paleblue'}
        order_by = "-created"

Это покажет пустые значения () для столбца created. Остальные столбцы отображаются, как и ожидалось.

1 Ответ

0 голосов
/ 07 сентября 2018

django-tables2 ожидает, что входные данные для DateTimeColumn будут фактическим datetime экземпляром, это реализация:

def __init__(self, format=None, short=True, *args, **kwargs):
    if format is None:
        format = "SHORT_DATETIME_FORMAT" if short else "DATETIME_FORMAT"
    template = '{{ value|date:"%s"|default:default }}' % format
    super(DateTimeColumn, self).__init__(template_code=template, *args, **kwargs)

Итак, я думаю, у вас есть два варианта:

  1. написать пользовательский столбец или использовать render_foo методы , чтобы убедиться, что данные правильно отображаются в таблице
  2. Преобразуйте строковые значения в datetime экземпляры перед передачей данных в django-tables2.

Я бы предложил использовать 2.

...