Почему мой шаблон Django не отображает правильную дату, указанную в базе данных?

Моя модель содержит поле даты 'valid_until'. Даже если запись содержит дату '12/25/2022', шаблон обновления буквально отображает в качестве содержимого 'mm/dd/yyy', когда пользователь пытается изменить дату. Почему? Также, похоже, нет способа создать текст-заменитель или даже изменить формат даты (она всегда отображается в том же формате - даже если я указываю '%m/%d/%y' в forms.py и settings.py содержит формат '%m/%d/%y'). Почему? Все эти проблемы, похоже, связаны с функцией выбора даты. Являются ли формы Django несовместимыми с функцией выбора даты?

settings.py:

TIME_ZONE = 'US/Eastern'
USE_I18N = True
USE_L10N = True
DATE_INPUT_FORMATS = '%m/%d/%y'

models.py:

class DecisionsList(models.Model):
        summary = models.CharField(default="", max_length=75, ` 
 verbose_name="Decision Summary")
        description = models.CharField(max_length=100, verbose_name="Decision Description")
        valid_until = models.DateField(default=timezone.now, verbose_name="Voting End Date")
        date_created = models.DateTimeField(default=timezone.now)   

views.py:

class UpdateDecisionView(LoginRequiredMixin, UpdateView):

  model = DecisionsList
    form_class = DecisionForm
    template_name = "users/update_decision.html"

forms.py:

class DecisionForm(forms.ModelForm):
    class Meta:
        model = DecisionsList
        fields = ['summary', 'description', 'valid_until']
        widgets = {
            'valid_until': forms.DateInput(
                format='%m/%d/%y',
                attrs={'type': 'date', 'placeholder': "Select a date"
                       }),
            'description': forms.Textarea(
                attrs={'line-height': '50px',
                       })
        }

update_decision.html:

{% extends "users/base_users.html" %}

{% load crispy_forms_tags %}
{% load crispy_forms_filters %}


<body>

  {% block content %}

      <div class="nav">
        <a id="company" {% block company %} class="selected" {% endblock %} href=""></a>
      </div>

      <div class="containers database-containers">
        <h2>Update a Decision</h2>
      <form method="post">
        <div class="form-group">
                  {% csrf_token %}
                  {{form.summary|as_crispy_field}}
                  <div class="text-area">
                  {{form.description|as_crispy_field}}
                  </div>
                  <div class="short-field">
                  {{form.valid_until|as_crispy_field}}
                  </div>
            <input type="submit" class="btn" value="Update"/>
              <a href="{% url 'users:company' %}" class="btn">Cancel</a>
        </div>
      </form>
      </div>

  {% endblock %}

</body>

Вот допустимый список форматов дат, которые Django будет принимать:

[
    '%Y-%m-%d',  # '2006-10-25'
    '%m/%d/%Y',  # '10/25/2006'
    '%m/%d/%y',  # '10/25/06'
    '%b %d %Y',  # 'Oct 25 2006'
    '%b %d, %Y',  # 'Oct 25, 2006'
    '%d %b %Y',  # '25 Oct 2006'
    '%d %b, %Y',  # '25 Oct, 2006'
    '%B %d %Y',  # 'October 25 2006'
    '%B %d, %Y',  # 'October 25, 2006'
    '%d %B %Y',  # '25 October 2006'
    '%d %B, %Y',  # '25 October, 2006'
]

Если вы используете JQuery UI datepicker, вы можете изменить формат на элементе UI. Просто убедитесь, что он соответствует тому, что принимает Django - more info

$( ".selector" ).datepicker({
  dateFormat: "mm/dd/yy"
});

Я только что наткнулся на решение в старом посте под названием: "Какой самый чистый, простой в использовании датапикер в Django?". Смотрите ссылку ниже:

Какой самый чистый, простой в использовании датапикер в Django?

Я нашел решение, которое решило все мои проблемы с Django / DatePicker: Вот что я делаю, никаких внешних зависимостей.:

Пост, в котором приводится пример того, как использовать выборку даты в Django

models.py:

from django.db import models


class Promise(models):
    title = models.CharField(max_length=300)
    description = models.TextField(blank=True)
    made_on = models.DateField()
forms.py:

from django import forms
from django.forms import ModelForm

from .models import Promise


class DateInput(forms.DateInput):
    input_type = 'date'


class PromiseForm(ModelForm):

    class Meta:
        model = Promise
        fields = ['title', 'description', 'made_on']
        widgets = {
            'made_on': DateInput(),
        }
my view:

class PromiseCreateView(CreateView):
    model = Promise
    form_class = PromiseForm
And my template:

<form action="" method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Create" />
</form>
Вернуться на верх