django输入有效日期。验证错误

时间:2012-02-03 12:43:40

标签: django

我的模特

 class Member(models.Model):

dob = models.DateField('dob')

表格

class MemberForm(ModelForm):
  dob = forms.DateField(required=False, input_formats='%Y-%m-%d')
  class Meta:
    model = Member
    exclude = ('profile',)   

一些视图代码

if request.method == 'POST': # If the form has been submitted...
        signup_form = SignupForm(request.POST) # A form bound to the POST data
        # Create a formset from the submitted data
        member_formset = MemberFormSet(request.POST, request.FILES)
        # import pdb; pdb.set_trace()
        if signup_form.is_valid() and member_formset.is_valid():
          print 'in valid'
          signup = signup_form.save(request.POST)
          for form in member_formset.forms:
            member = form.save(commit=False)
            member.profile = signup
            # import pdb; pdb.set_trace()
            # print member.objects.all()
            member.save()
          return redirect("/main") # Redirect to a 'success' page

当提交表单时,出现错误消息

Enter a valid date.

我该怎么做才能解决这个问题。

4 个答案:

答案 0 :(得分:20)

input_formats需要是一个列表,请参阅

示例:

['%Y-%m-%d',      # '2006-10-25'
'%m/%d/%Y',       # '10/25/2006'
'%m/%d/%y']       # '10/25/06'

https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.DateField

答案 1 :(得分:10)

我更喜欢设置** DATE_INPUT_FORMATS 在settings.py中,然后定义如下字段:

dob = forms.DateField(input_formats=settings.DATE_INPUT_FORMATS)

这比在每个表单字段中设置它更加干燥。

如果是文本字段输入,我几乎总是将接受的格式放在字段help_text中,以便用户可以知道接受的格式是什么。

答案 2 :(得分:2)

模型中已有DateField后,您无需添加新字段。

您只需为此字段设置input_formats

self.fields[ 'dob' ].input_formats = [ '%Y-%m-%d' ]

参考文献:DateFieldFormat Localization

答案 3 :(得分:0)

input_formats是你的朋友。

如果您接受javascript,那么您可以使该字段使用类似jQuery日历(即只读文本字段并单击它将调用jquery代码并弹出日历小部件)。您可以将this calendar widget作为起点。