Django model DateField格式为modelformset_factory

时间:2018-12-06 20:47:16

标签: python django date datefield

我正在尝试为名为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' });

到目前为止,一切都很好,到目前为止一切正常。但是,当我再次将表单发布到视图中并保存modelformset时,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 :(得分:0)

您可能需要重新格式化日期以匹配字段的要求(yyyy-mm-dd)。使用dd / mm / yyyy格式的datapicker工具后,您需要通过jQuery更改值。

类似的东西

  $("#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