python - widgets - tipos de formularios en django




Cambiar el ancho de los elementos de formulario creados con ModelForm en Django (2)

Excelente respuesta de zuber, pero creo que hay un error en el código de ejemplo para el tercer enfoque. El constructor debe ser:

def __init__(self, *args, **kwargs):
    super(ProductForm, self).__init__(*args, **kwargs) # Call to ModelForm constructor
    self.fields['long_desc'].widget.attrs['cols'] = 10
    self.fields['long_desc'].widget.attrs['cols'] = 20

Los objetos Field no tienen atributos 'attrs', pero sí sus widgets.

¿Cómo puedo cambiar el ancho de un elemento de formulario textarea si utilicé ModelForm para crearlo?

Aquí está mi clase de producto:

class ProductForm(ModelForm):
    long_desc = forms.CharField(widget=forms.Textarea)
    short_desc = forms.CharField(widget=forms.Textarea)
    class Meta:
        model = Product

Y el código de la plantilla ...

{% for f in form %}
    {{ f.name }}:{{ f }}
{% endfor %}

f es el elemento de forma real ...


En el caso de que esté usando un complemento como Grappelli que hace un uso intensivo de los estilos, es posible que los atributos de fila y col anulados se ignoren debido a los selectores de CSS que actúan en su widget. Esto podría ocurrir cuando se utiliza el excelente segundo o tercer enfoque de zuber anterior.

En este caso, simplemente use el Primer Enfoque mezclado con el Segundo o Tercer Enfoque estableciendo un atributo 'estilo' en lugar de los atributos 'filas' y 'columnas'.

Aquí hay un ejemplo de modificación de init en el tercer enfoque anterior:

def __init__(self, *args, **kwargs):
    super(ProductForm, self).__init__(*args, **kwargs) # Call to ModelForm constructor
    self.fields['short_desc'].widget.attrs['style'] = 'width:400px; height:40px;'
    self.fields['long_desc'].widget.attrs['style']  = 'width:800px; height:80px;'






django-templates