'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.

Back to Top