django как отформатировать дату в ДД / ММ / ГГГГ

#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

5. docs.djangoproject.com/en/3.1/ref/forms/fields/…

Ответ №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. вернемся к полю, когда я обновляю свое поле, оно показывает дд / мм / гг, я нажимаю обновить, затем на следующей странице оно становится мм / дд / гг! я хочу только один формат дд / мм / гггг. Спасибо