2012-02-03 52 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