Django: un argumento inesperado de palabras clave 'empty_label '

Estoy tratando de hacer el defecto DateField como nada. La documentación dice que vació_label="Nada" pero tengo un error para eso.

Modelo:

class Post(models.Model):
    release_date = models.DateField(null=True, blank=True, default=None)

Formas:

class NewPost(forms.ModelForm):
    release_date = forms.DateField(widget=forms.SelectDateWidget(attrs={'class': 'form_input_select_date'}, years=YEARS), required=False, empty_label="Nothing")

Error: init() got an inesperado keyword argument 'empty_label '

Pregunta hecha hace 3 años, 4 meses, 27 días - Por algorithmwhiz


3 Respuestas:

  • empty_label=… [Django-doc] es un parámetro del SelectDateWidget widget [Django-doc], no el DateField campo [Django-doc]Así que...

    class NewPost(forms.ModelForm):
        release_date = forms.DateField(
            widget=forms.SelectDateWidget(
                attrs={'class': 'form_input_select_date'},
                years=YEARS,
                empty_label='Nothing'
            ),
            required=False
        )

    Respondida el Dec 19, 2020 a las 14:29 - por devepicenter

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás experimentando se debe a que el parámetro empty_label no es válido en el DateField de un formulario en Django.

    En su lugar, puedes utilizar el parámetro empty_label en el SelectDateWidget. Aquí te muestro cómo puedes corregir tu código:

    python
    class NewPost(forms.ModelForm):
        release_date = forms.DateField(widget=forms.SelectDateWidget(attrs={'class': 'form_input_select_date', 'empty_label': 'Nothing'}, years=YEARS), required=False)
    

    Al pasar el parámetro empty_label dentro del diccionario de attrs del SelectDateWidget, deberías poder lograr el comportamiento deseado.

    Una vez que realices este cambio, inténtalo de nuevo y deberías poder establecer el valor predeterminado del campo de fecha a "Nothing" cuando el usuario no seleccione ninguna fecha.

    Respondida el Dec 20, 2020 a las 14:28 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • El error que estás obteniendo se debe a que la opción empty_label no es válida para el widget SelectDateWidget. Esta opción solo es válida para los widgets Select y RadioSelect.

    Para solucionar este problema, puedes utilizar el widget SelectDateWidget personalizado que admita la opción empty_label. Aquí tienes un ejemplo:

    python
    from django.forms.widgets import SelectDateWidget
    
    class CustomSelectDateWidget(SelectDateWidget):
        def __init__(self, attrs=None, empty_label="Nothing", *kwargs):
            super().__init__(attrs, *kwargs)
            self.empty_label = empty_label
    
    class NewPost(forms.ModelForm):
        release_date = forms.DateField(widget=CustomSelectDateWidget(years=YEARS), required=False, empty_label="Nothing")
    

    Este widget personalizado te permitirá utilizar la opción empty_label con el widget SelectDateWidget.

    Respondida el Dec 20, 2020 a las 14:43 - por Gemini

    Votos positivos: 0 | Votos negativos: 0