Форматирование DateTimeField в Django - PullRequest
0 голосов
/ 21 ноября 2018

При сохранении отметки времени в Django DateTimeField, используя auto_now_add, таким образом:

creation_timestamp = models.DateTimeField(auto_now_add=True)

поле сохраняется в миллисекундах:

2018-11-20T15:58:44.767594-06:00

Я хочу отформатировать это, чтобыотображается без миллисекунд:

2018-11-20T15:58:44-06:00

Но единственный вариант, который я смог придумать, точно не показывает, что мне нужно:

format="%Y.%m.%dT%H:%M:%S%z" дает мне 2018.11.20T15:58:44-0600 Как мне отформатировать это полекак мне нужно?

В качестве альтернативы я бы предпочел сэкономить DateTimeField вообще без миллисекунд, но позволяет ли auto_now_add делать подобные вещи?

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Я думаю, вам придется использовать изоформат.Посмотрите на этот ответ:

Показать символ: в смещении часового пояса, используя datetime.strftime

0 голосов
/ 21 ноября 2018

Вы можете переопределить метод DateTimeField value_to_string и добавить туда изменения.Например:

class CustomDateTimeField(models.DateTimeField):
    def value_to_string(self, obj):
        val = self.value_from_object(obj)
        if val:
            val.replace(microsecond=0)
            return val.isoformat()
        return ''

И использовать его в модели:

 created = CustomDateTimeField(auto_now_add=True)
0 голосов
/ 21 ноября 2018

Если вы хотите отформатировать его при отображении, вы можете использовать: creation_timestamp.strftime("%Y-%m-%d%H:%M:%S")

Вы также можете сделать DateTimeField, чтобы сохранить его в этом формате, но для этого потребуется набор изменений, которыебудет применяться в масштабе всей системы:

В вашем файле настроек установите следующее:

  1. DATETIME_FORMAT="%Y-%m-%d%H:%M:%S"
  2. L10N=False, чтобы данные локализации болячек не имели прецедентакогда дело доходит до формата даты.
  3. USE_TZ=False

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

...