Django - изменить формат представления поля даты модели по умолчанию

У меня есть модель с DateField, установленная следующим образом:

date = models.DateField(blank=False, default=datetime.now)

каждый раз, когда я помещаю данные этого поля в шаблон ({{obj.date}}), он отображается в следующем формате:

July 24, 2014

и я хочу навсегда изменить это на этот формат:

24.7.2014

также у меня есть страница поиска, где данные можно искать по полю даты - я хочу иметь возможность искать и в этом формате. Как я могу это сделать?

EDIT: я думаю, что это как-то связано с настройкой LANGUAGE_CODE = 'en-us'. когда я меняю это, он также меняет формат даты. как его можно перезаписать?


person user2216190    schedule 08.08.2014    source источник


Ответы (3)


Django использует l10n для форматирования чисел, дат и т. д. в локальные значения. Изменение вашего LANGUAGE_CODE — это хороший момент, который позволяет Django загружать правильную среду.

В дополнение к этому вам необходимо настроить использование l10n через USE_L10N=True См.: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-USE_L10N

Чтобы позволить полю формы локализовать входные и выходные данные, просто используйте его аргумент локализации:

class CashRegisterForm(forms.Form):
   product = forms.CharField()
   revenue = forms.DecimalField(max_digits=4, decimal_places=2, localize=True)

Это также отлично работает для дат.

(от: https://docs.djangoproject.com/en/dev/topics/i18n/formatting/#locale-aware-input-in-forms)

edit: для использования в шаблоне вы можете просто форматировать даты с помощью:

{% load l10n %}

{{ value|localize }}

or

{{ your_date|date:"SHORT_DATE_FORMAT" }}

второй использует SHORT_DATE_FORMAT в settings.py

привет, Марк

person mrcrgl    schedule 08.08.2014
comment
это все еще не решение, которое я ищу - я хочу перезаписать формат, используемый для всего. я хочу иметь возможность искать базу данных по этому формату и отображать данные в том же формате. формы не относятся к вопросу. Спасибо! - person user2216190; 08.08.2014
comment
изменение языкового кода возможно, но языковой код в нашей стране не тот, который я ищу. - person user2216190; 08.08.2014
comment
серьезно, способ, которым вы вводите данные в свой код, - это формы. Там вы уверены, что используется правильный формат и что в нем нет вредоносного кода. Это должно быть так: [Browser/UserInput] -> [Form] -> [View] -> [Model] - person mrcrgl; 12.08.2014

используйте дату и время пинтона:

from datetime import datetime

date = models.DateField(blank=False, default=datetime.now().strftime("%d.%m.%Y"))
person slim_chebbi    schedule 08.08.2014
comment
Я не знаю, как это на самом деле сохраняется в базе данных, но когда я смотрю на базу данных с помощью браузера базы данных, данные поля даты отображаются в этом формате: 2014-07-17, поэтому я думаю, что это не имеет ничего общего с форматом сохранения, а с способ представления данных. - person user2216190; 08.08.2014
comment
вот почему я ищу решение, чтобы изменить способ, которым django показывает такие данные по умолчанию - person user2216190; 08.08.2014

Если вас беспокоит то, как отображается дата (выходной формат); вы можете использовать фильтр date, как описано здесь:

{{ obj.date|date:"d.m.Y"}} 

А вот и документы по Django.

person J0ANMM    schedule 07.12.2016