es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Múltiples widgets en campo de formulario – Formularios de Django

Estoy trabajando en un formulario en Django y tiene un elemento select con un ID único. Esto es lo que estoy haciendo actualmente:

instance_type = forms.CharField(label='Tipo de instancia', widget=forms.Select(choices=INSTANCE_TYPES),
                                    widget=forms.TextInput(attrs={'id':'instance_type'}))

El problema es que Django me está dando un error de sintaxis que dice:

SyntaxError: keyword argument repeated: widget

Necesito combinar estos dos widgets en uno, pero no he encontrado una solución para ello.

Cualquier ayuda es apreciada. ¡Gracias a todos!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con el código proporcionado es que el argumento widget se repite dos veces en la misma línea. Esto está causando un error de sintaxis. Para combinar los dos widgets, puedes usar la clase MultiWidget de Django.

    Aquí tienes un ejemplo de código que combina un widget Select y un widget TextInput:

    from django.forms.widgets import MultiWidget, Select, TextInput
    
    class CustomWidget(MultiWidget):
        def __init__(self, attrs=None):
            widgets = [
                Select(choices=INSTANCE_TYPES),
                TextInput(attrs={'id': 'instance_type'})
            ]
            super().__init__(widgets, attrs)
    
    class CustomForm(forms.Form):
        instance_type = forms.CharField(label='Tipo de instancia', widget=CustomWidget())
    

    En el código anterior, creamos un nuevo CustomWidget que hereda de la clase MultiWidget de Django. Dentro de la clase CustomWidget, definimos dos widgets: un widget Select y un widget TextInput. Luego llamamos al constructor de MultiWidget con una lista de widgets, y establecemos el argumento widget del campo del formulario como una instancia de CustomWidget.

    Ahora, cuando se renderiza el formulario, mostrará tanto el widget Select como el widget TextInput como un solo widget.

Comments are closed.