#django #django-models #django-forms #django-views
#django #django-модели #django-формы #django-просмотры
Вопрос:
django как отформатировать дату в ДД / ММ / ГГГГ в этом случае :
class Invoice(models.Model):
date = models.DateField(default=timezone.now)
class InvoiceForm(ModelForm):
class Meta:
model = Invoice
fields = "__all__"
Комментарии:
1. Модель не о том, как форматировать вещи. Модель предназначена для хранения вещей. Таким образом, в основном модель не имеет «формата» (или, по крайней мере, не имеет «внешнего мира»). Вы форматируете ее в шаблонах, формах и т.д.
2. как уже говорилось, вы указываете формат в шаблоне (или в настройках, которые используются шаблоном) и в формах (хотя они также принимают настройки в качестве формата по умолчанию).
3. docs.djangoproject.com/en/3.1/ref/settings/#date-input-formats
4. пожалуйста, следуйте формату, чтобы задать вопрос. в качестве дополнительной заметки прочтите здесь , если хотите узнать больше о форматировании дат (или чего-либо еще) в базе данных, в частности, раздел о поле даты и времени и здесь для дат в python
Ответ №1:
Model
Речь идет не о том, как вы представляете данные клиенту, а о том, как вы храните данные в базе данных.
Если вы предоставляете данные пользователю, это зависит от настроек, которые активны. Если, например, USE_L10N
настройка [Django-doc] активна, она попытается определить языковой стандарт пользователя и на основе этого отформатировать дату. Это означает, что немецкий пользователь увидит другой формат даты, чем, например, американский пользователь.
Если USE_L10N
установлено значение False
, в поле формы с используйте первый пункт в DATE_INPUT_FORMATS
настройке [Django-doc]. По умолчанию это:
[ '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06' '%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006' '%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006' '%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006' '%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006' ]
таким образом, сначала будет отформатирован год, месяц, а затем дата, так 2020-08-28
например. Таким образом, вы можете указать другой элемент (первый), чтобы изменить это для всех Form
элементов, у которых есть DateField
поля [Django-doc].
Если вы хотите указать одноразовое поле, вы можете использовать format=…
параметр [Django-doc] DateInput
виджета, например:
from django import forms
class InvoiceForm(ModelForm):
date = forms.DateField(widget=forms.DateInput(format='%d/%m%Y'))
class Meta:
model = Invoice
fields = '__all__'
Тогда вам также следует включить формат в DATE_INPUT_FORMATS
настройку, и лучше с более высоким приоритетом, чем «перекрывающиеся» форматы, такие как %m/%d/%Y
и %m/%d/%y
, чтобы гарантировать, что значение также может быть проанализировано.
Вы также можете предоставить одноразовый список форматов ввода в поле формы, указав input_formats=…
параметр [Django-doc].
Комментарии:
1. это работает с полями, но для html, как я могу продолжить? в случае, если <td>{{ счет-фактура. дата }}</td> а также в случае <td>даты</td>
2. @youssefmohamed: указав
DATE_FORMAT
настройку docs.djangoproject.com/en/3.0/ref/settings/#date-format или с помощью|date
фильтра ( docs.djangoproject.com/en/dev/ref/templates/builtins/#date ) для одноразовых случаев, так{{ invoice.date|date:'Y-m-d' }}
.3. вернемся к полю, когда я обновляю свое поле, оно показывает дд / мм / гг, я нажимаю обновить, затем на следующей странице оно становится мм / дд / гг! я хочу только один формат дд / мм / гггг. Спасибо