La forma más fácil para su caso de uso es usar CSS. Es un lenguaje destinado a definir la presentación. Mire el código generado por el formulario, tome nota de los identificadores para los campos que le interesan y cambie la apariencia de estos campos a través de CSS.
Ejemplo para long_desc
campo en su ProductForm (cuando el formulario no tiene un prefijo personalizado):
#id_long_desc {
width: 300px;
height: 200px;
}
segundo enfoque es pasar la palabra clave attrs
a su constructor de widgets.
class ProductForm(ModelForm):
long_desc = forms.CharField(widget=forms.Textarea(attrs={'cols': 10, 'rows': 20}))
short_desc = forms.CharField(widget=forms.Textarea)
class Meta:
model = Product
Es described in Django documentation.
El tercer enfoque es dejar la agradable interfaz declarativa de newforms por un tiempo y establecer los atributos del widget en el constructor personalizado.
class ProductForm(ModelForm):
long_desc = forms.CharField(widget=forms.Textarea)
short_desc = forms.CharField(widget=forms.Textarea)
class Meta:
model = Product
# Edit by bryan
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['rows'] = 20
Este enfoque tiene las siguientes ventajas:
- Puede definir widget de atributos para los campos que se generan automáticamente a partir de su modelo sin redefinir campos enteros.
- No depende del prefijo de su formulario.
El segundo funcionaba perfectamente –
Opción 3 es muy útil. Quizás el ejemplo también podría mostrar que los campos no necesitan definirse en el Formulario, pero aún pueden anular los campos definidos en el Modelo que se procesan automáticamente. –