Модель Django формата DateField в modelformset_factory - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь создать modelform_factory для моей модели с именем Book, но DateField ведет себя странно.

class Book(models.Model):
   name = models.CharField(max_length = 50)
   date = models.DateField(max_length = 50)

У меня есть функция в моем views, которая возвращает это:

modelform = modelformset_factory(Book, fields = (
    'name',
    'date',
),
can_delete=True,
widgets = {
    'date': forms.DateInput(format='%d/%m/%Y'),
})

В моем template эта форма модели будет отображаться с помощью средства выбора даты:

$('.datepicker').datepicker({ format: 'dd/mm/yyyy' });

Пока все хорошо, и до этого момента все работало, как и ожидалось.Но когда я снова публикую свою форму в свой вид и сохраню набор моделей, дата dd/mm/yyyy ошибочно преобразуется в yyyy-mm-dd.

if request.method == 'POST':
    formset = modelform(request.POST, request.FILES, queryset=Book.objects.filter(name=book))

    if formset.is_valid():
        formset.save() # This first deletes all instances that are checked for deletion
        f = formset.save(commit=False) # This filters the formset to only include filled in forms
        for form in f:
            form.save()
        return HttpResponse("success")

Кто-нибудь знает, как мне отформатировать эту dd/mm/yyyy дату для правильного ввода в базу данных?

1 Ответ

0 голосов
/ 07 декабря 2018

Возможно, вам нужно переформатировать дату, чтобы она соответствовала тому, что требуется для поля (гггг-мм-дд).Вам нужно будет изменить значение с помощью jQuery после использования инструмента datapicker, который использует формат dd / mm / yyyy.

Что-то вроде:

  $("#dateField").on('change', function(){
      var arr = $("#dateField").val().split("/");
      var newDate = arr[2]+"-"+arr[1]+"-"+arr[0];
      $("#dateField").val(newDate);
  });

Затем вам понадобитсяпроанализировать эту строку в виде даты в вашем представлении перед сохранением с parse_date:

from datetime import datetime

date = request.POST['dateField']
pDate= parse_date(date)
form.date = pDate
form.save()

В источнике: https://docs.djangoproject.com/en/2.1/_modules/django/db/models/fields/#DateField https://docs.djangoproject.com/en/2.1/ref/utils/#module-django.utils.dateparse

...