2012-02-03 32 views
8

Mi modelo de formadjango Ingrese una fecha válida. error de validación

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',) 

algún código de la vista

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 

cuando m enviar el formulario el mensaje de error que viene es

Enter a valid date. 

¿Qué debo hacer para resolver esta validación?

Respuesta

9

prefiero establecer DATE_INPUT_FORMATS en settings.py y luego definir el campo como:

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

Esto es más DRY que establecerlo por campo de formulario.

Si se trata de una entrada de campo de texto, casi siempre pongo los formatos aceptados en el campo help_text para que el usuario pueda saber qué formato (s) se acepta (n).

0

El input_formats es tu amigo.

Si acepta javascript, puede hacer que el campo use algo como el calendario jQuery (es decir, un campo de texto de solo lectura y al hacer clic en él se llamará al código jquery y aparecerá el widget del calendario). Puede tener this calendar widget como punto de partida.

1

No necesita agregar un campo nuevo una vez que ya tiene un DateField en su Modelo.

sólo hay que ajustar la input_formats para este campo:

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

Referencias: DateField y Format Localization

Cuestiones relacionadas