'DateField' object has no attribute 'value_from_datadict'
I've been researching everywhere for an answer for this, but I'm just trying to add a widget to my DateField created on my models.py, where you can see the actual calendar, as if you were doing it directly through html with an input type=date. Since I have a few date fields, this has become a problem because they all need to have the same format as the rest of the form and the widget. Feel like the question has been answered but none of the answers or things I've found have returned a correct answer.
models.py
class InfoPersonal(models.Model):
Fecha = models.DateField()
cargo_act = models.CharField(max_length=100)
Nombres_y_Apellidos_completos = models.CharField(max_length=100)
Lugar = models.CharField(max_length=100)
Fecha_de_Nacimiento = models.DateField(null=True)
Discapacidad= models.BooleanField()
grado = models.CharField(max_length=100, blank=True)
Edad = models.IntegerField(validators=[MinValueValidator(18), MaxValueValidator(80)])
Tipo_de_Sangre = models.CharField(max_length=50, choices=sangre_choice)
Estatura = models.FloatField(validators=[MaxValueValidator(3.0), MinValueValidator(0.5)])
Direccion_Domicilio_actual = models.CharField(max_length=100)
Manzana = models.CharField(max_length=100)
Villa = models.CharField(max_length=100)
parroquia = models.CharField(max_length=100)
Telefono_Domicilio = models.IntegerField(blank=True, null=True)
Telefono_Celular = models.IntegerField(blank=True, null=True)
Telefono_Familiar = models.IntegerField(blank=True, null=True)
cedula = models.IntegerField()
estado_civil = models.CharField(max_length=50, choices=list_estado_civil)
#Conyuge
Nombre_completo_del_conyuge= models.CharField(max_length=100,blank=True)
Direccion_Domiciliaria=models.CharField(max_length=100,blank=True)
Telefono=models.IntegerField(blank=True, null=True)
Cedula_de_Identidad=models.IntegerField(blank=True, null=True)
Fecha_de_NacimientoC=models.DateField(blank=True, null=True)
Direccion_Trabajo=models.CharField(max_length=100,blank=True)
Telefono_del_trabajo=models.IntegerField(blank=True,null=True)
#Hijos
Nombres= models.CharField(max_length=100,blank=True)
Lugar_y_Fecha_de_NacimientoH = models.CharField(max_length=100,blank=True)
Esposo_con_Discapacidad = models.BooleanField(blank=True)
Hijos_con_Discapacidad= models.BooleanField(blank=True)
#InfoFamiliares
Apellidos_y_Nombres_1= models.CharField(max_length=100,blank=True)
Telefono_Familiar_1 = models.IntegerField(blank=True,null=True)
Fecha_Nacimiento_1 = models.DateField(blank=True,null=True)
Relacion_de_Parentesco_1 = models.CharField(max_length=100,blank=True)
Apellidos_y_Nombres_2= models.CharField(max_length=100,blank=True)
Telefono_Familiar_2 = models.IntegerField(blank=True,null=True)
Fecha_Nacimiento_2 = models.DateField(blank=True,null=True)
Relacion_de_Parentesco_2 = models.CharField(max_length=100,blank=True)
Apellidos_y_Nombres_3= models.CharField(max_length=100,blank=True)
Telefono_Familiar_3 = models.IntegerField(blank=True,null=True)
Fecha_Nacimiento_3 = models.DateField(blank=True,null=True)
Relacion_de_Parentesco_3 = models.CharField(max_length=100,blank=True)
Apellidos_y_Nombres_4= models.CharField(max_length=100,blank=True)
Telefono_Familiar_4 = models.IntegerField(blank=True, null=True)
Fecha_Nacimiento_4 = models.DateField(blank=True,null=True)
Relacion_de_Parentesco_4 = models.CharField(max_length=100,blank=True)
Trabajan_familiares = models.BooleanField(blank=True)
Trabajan_Amistades = models.BooleanField(blank=True)
#estudiosRealizados
Primaria=models.CharField(max_length=100)
Lugar_Primaria= models.CharField(max_length=100)
Curso_Primaria= models.CharField(max_length=100)
Año_Primaria=models.IntegerField()
Titulo_Primaria=models.CharField(max_length=100)
Secunadaria=models.CharField(max_length=100)
Lugar_Secundaria=models.CharField(max_length=100)
Curso_Secundaria=models.CharField(max_length=100)
Año_Secundaria=models.IntegerField()
Titulo_Secundaria=models.CharField(max_length=100)
Superior=models.CharField(max_length=100)
Lugar_Superior=models.CharField(max_length=100)
Curso_Superior=models.CharField(max_length=100)
Año_Superior=models.IntegerField()
Titulo_Superior=models.CharField(max_length=100)
Otros=models.CharField(max_length=100,blank=True)
Lugar_Otros=models.CharField(max_length=100,blank=True)
Curso_Otros=models.CharField(max_length=100,blank=True)
Año_Otros=models.IntegerField(blank=True, null=True)
Titulo_Otros=models.CharField(max_length=100,blank=True)
idioma=models.CharField(max_length=100)
forms.py
lass Form_InfoPersonal(ModelForm):
class Meta:
model = InfoPersonal
fields = '__all__'
widgets = {
'Nombres_y_Apellidos_completos': forms.TextInput(attrs={'class':'form-control form-control-lg mt-3 ml-4 w-75','required':True}),
'cargo_act': forms.TextInput(attrs={'class':'form-control form-control-lg mt-3 ml-4 w-75','required':True}),
'Lugar': forms.TextInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75', 'required':True}),
'Fecha': forms.DateField(widget=NumberInput(attrs={'type':'date'})),
'grado': forms.TextInput(attrs={'class':'form-control form-control-lg mt-3 ml-4 w-75','required':False}),
'Edad' : forms.NumberInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75', 'required':True}),
'Tipo_de_Sangre' : forms.TextInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75','required':True}),
'Estatura': forms.NumberInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75', 'required':True}),
'Direccion_Domicilio_actual': forms.TextInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75', 'required':True}),
'Manzana':forms.TextInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75', 'required':True}),
'Villa': forms.TextInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75', 'required':True}),
'parroquia': forms.TextInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75', 'required':True}),
'Telefono_Domicilio' : forms.NumberInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75' }),
'Telefono_Celular': forms.NumberInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75', 'required':True}),
'Telefono_Familiar': forms.NumberInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75', 'required':True}),
'cedula': forms.NumberInput(attrs={'class': 'form-control form-control-lg mt-3 ml-4 w-75', 'required':True}),
}
views.py
def formu_view(request):
if request.method == 'POST':
form = Form_InfoPersonal(request.POST)
if form.is_valid():
form.save()
messages.success(request, 'Su formulario ha sido llenado y guardado correctamente')
return render(request, '')
else:
form= Form_InfoPersonal()
return render(request, 'users/formu.html', context={'form':form})
You are using the wrong class for the widget. Change
'Fecha': forms.DateField(widget=NumberInput(attrs={'type':'date'})),
to
'Fecha': forms.DateInput(widget=NumberInput(attrs={'type':'date'})),
^^^^^^^^^
forms.DateField is intended for declaring the field of a form. It doesn't have a method value_from_datadict() as required by validation. forms.DateInput is the widget used for a date input. It has the desired method.