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']