2012-02-03 50 views
8

我的模型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 

当m提交表单来的错误信息是

Enter a valid date. 

我应该如何解决此验证问题。

回答

9

我喜欢设置在settings.py DATE_INPUT_FORMATS,然后定义喜欢的领域:

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

这比在每个表单字段的基础上设置它更干。

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

0

input_formats是你的朋友。

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

1

一旦您的模型中已有DateField,则不需要添加新字段。

你只需要设置input_formats此字段:

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

参考文献:DateFieldFormat Localization