2016-05-20 7 views
0

У меня есть это поле в моей модели:Джанго модель DateTimeField установить auto_now_add формат или изменить сериалайзер

createdTime = models.DateTimeField(_('Creation date'), help_text=_('Date of the creation'), 
            auto_now_add=True, blank=True) 

И сохраняется с этим форматом:

2016-05-18T15: 37: 36.993048Z

Поэтому я хотел был бы преобразовать его в этот формат DATE_INPUT_FORMATS = ('%d-%m-%Y %H:%M:S'), но я не знаю, где это сделать.

У меня есть простой класс сериализатора, могу ли я переопределить его для изменения формата? или, возможно, создать метод модели get_date()?

class ObjectSerializer(serializers.ModelSerializer): 
    """ 
    Serializer for object. 
    """ 
    class Meta: 
     model = Object 

Мои настройки:

DATETIME_FORMAT = '%d-%m-%Y %H:%M:%S' 

USE_I18N = True 

USE_L10N = False 

USE_TZ = False 

ответ

1

Set DATETIME_FORMAT в вашем settings.py, как указано here.

форматирования по умолчанию использовать для отображения даты-времени полей в любой часть системы. Обратите внимание, что если USE_L10N установлено значение Да, то локаль диктуемых формат имеет более высокий приоритет и будет применяться вместо

Дата часть вашего settings.py должны впоследствии выглядеть так:

DATETIME_FORMAT = '%d-%m-%Y %H:%M:S' 
USE_L10N = False 
USE_TZ = False # if you plan to disable timezone support 

В качестве альтернативы вы можете вручную изменить форматы после извлечения:

import datetime 

datetime_str = '2016-05-18T15:37:36.993048Z' 
old_format = '%Y-%m-%dT%H:%M:%S.%fZ' 
new_format = '%d-%m-%Y %H:%M:%S' 

new_datetime_str = datetime.datetime.strptime(datetime_str, old_format).strftime(new_format) 
print(new_datetime_str) 
#'18-05-2016 15:37:36' 

Это преобразование может быть добавлено к вашей сериализатора или модели в качестве предлагаемого вами метода get_date()

+0

Здравствуйте, спасибо за ответ. Я добавил эти параметры в свои настройки.py DATETIME_FORMAT = '% d-% m-% Y% H:% M: S' и USE_L10N = True, но он сохраняет эту дату следующим образом: + ------ ---------------------- + | createdTime | + ---------------------------- + | 2016-05-18 15: 37: 36.993048 | | 2016-05-23 08: 25: 41.536701 | | 2016-05-23 08: 27: 24.348154 | + ---------------------------- + У меня также есть USE_I18N = True – lapinkoira

+1

В вашем формате отсутствует символ: '% S' а не 'S'. Затем 'USE_L10N = False'. –

+0

Спасибо! Кофе еще не пнул еще ... Один вопрос, у меня также есть USE_I18N = True (отличное от USE_L10N), это поле также необходимо установить для False? – lapinkoira