简体   繁体   English

Django model DateField格式为modelformset_factory

[英]Django model DateField format in modelformset_factory

I'm trying to make a modelform_factory for my model named Book but the DateField is behaving strangely. 我正在尝试为名为Book模型制作一个modelform_factory ,但DateField的行为异常。

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

I have a function in my views that returns this: 我的views中有一个函数返回以下内容:

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

In my template this modelform will render with a datepicker: 在我的template此modelform将使用日期选择器呈现:

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

So far so good, and everything is working as expected to this point. 到目前为止,一切都很好,到目前为止,一切都按预期进行。 But when I post my form to my view again, and save the modelformset, the dd/mm/yyyy date is wrongly converted to yyyy-mm-dd . 但是,当我再次将表单发布到视图中并保存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")

Does someone has any clue how I can format this dd/mm/yyyy date to correctly enter my database? 有人知道如何格式化该dd/mm/yyyy日期以正确输入我的数据库吗?

You probably need to reformat the date to match what the field requires (yyyy-mm-dd). 您可能需要重新格式化日期以匹配字段的要求(yyyy-mm-dd)。 You'll need to change the value via jQuery after using the datapicker tool which is using the dd/mm/yyyy format. 使用dd / mm / yyyy格式的datapicker工具后,您需要通过jQuery更改值。

Somthing like: 有点像:

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

Then, you'll need to parse that string to a date type in your view before saving it with parse_date: 然后,您需要先在视图中将该字符串解析为日期类型,然后再使用parse_date保存该字符串:

from datetime import datetime

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

In the source: 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 在源中: https : //docs.djangoproject.com/zh-CN/2.1/_modules/django/db/models/fields/#DateField https://docs.djangoproject.com/zh-CN/2.1/ref/utils/#module -django.utils.dateparse

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM