Django - Поле модели DateTime сохраняет время как полночь

Я столкнулся с необычной и разочаровывающей проблемой: я отформатировал ввод даты/времени внутри формы, так что она знает, в каком формате я его отправляю, форма проверяется, и нет никаких проблем с данными, однако при сохранении она сохраняет время как полночь, независимо от того, как я его вставляю.

В приведенной ниже модели неудачным значением является sample_date.

База данных Pic: https://imgur.com/yUObctR

Модель

class WaterTest(models.Model):
    name = models.CharField(max_length=200)
    sample_date = models.DateTimeField()
    sample_address = models.TextField()
    mailing_address = models.TextField(blank=True, null=True)
    sample_point = models.CharField(max_length=200)
    job_site = models.ForeignKey(JobSite, on_delete=models.CASCADE, blank=True, null=True)
    template = models.ForeignKey(Template, on_delete=models.CASCADE, blank=True, null=True)
    collected_by = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE)

    def __str__(self):
        return f"{self.name}: {self.sample_address}"

    class Meta:
        verbose_name = 'Water Test'
        verbose_name_plural = 'Water Tests'

Форма

class CreateWaterTestForm(forms.ModelForm):
    sample_date = forms.DateField(input_formats=['%m/%d/%Y %H:%M'])

    class Meta:
        model = WaterTest
        fields = ['name', 'sample_date', 'sample_address', 'mailing_address', 'sample_point', 'job_site', 'template',
                  'collected_by']

create_report.html

<div class="col-md-6">
    <div class="mb-3">
        {{ form.sample_date.errors }}
        <label class="form-label" for="{{ form.sample_date.id_for_label }}">Sample Date/Time <span class="text-danger">*</span></label>
        {{ form.sample_date|add_class:"form-control" }}
    </div>
</div><!-- Col -->
<script>
  $("#{{ form.sample_date.id_for_label }}").datetimepicker({
    {% if THEME == 'demo2' %}theme: 'dark',{% endif %}
    format: 'm/d/Y H:i'
  });
</script>

DateTime picker: https://xdsoft.net/jqplugins/datetimepicker/

GitHub: https://github.com/varlenthegray/wcadmin/tree/dev

Решение оказалось намного проще, чем я ожидал. Убедитесь, что определение вашей формы соответствует всему остальному, иначе она будет ожидать только дату!

forms.py

class CreateWaterTestForm(forms.ModelForm):
    sample_date = forms.DateTimeField(input_formats=['%m/%d/%Y %H:%M'])

    class Meta:
        model = WaterTest
        fields = ['name', 'sample_date', 'sample_address', 'mailing_address', 'sample_point', 'job_site', 'template',
                  'collected_by']
Вернуться на верх