template - Principiante: Django ModelForm anula el widget
formularios django (1)
Descargo de responsabilidad: soy un principiante con python y Django pero tengo experiencia en programación con Drupal.
¿Cómo puedo anular el widget predeterminado de esto?
#models.py
class Project(models.Model):
color_mode = models.CharField(max_length=50, null=True, blank=True, help_text=''colors - e.g black and white, grayscale'')
en mi formulario con un cuadro de selección? ¿Está bien lo siguiente o me falta algo?
#forms.py
from django.forms import ModelForm, Select
class ProjectForm(ModelForm):
class Meta:
model = Project
fields = (''title'', ''date_created'', ''path'', ''color_mode'')
colors = (
(''mixed'', ''Mixed (i.e. some color or grayscale, some black and white)''),
(''color_grayscale'', ''Color / Grayscale''),
(''black_and_white'', ''Black and White only''),
)
widgets = {''color_mode'': Select(choices=colors)}
Después de leer https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-field-types-or-widgets , estoy perdido ya que el ejemplo solo analiza TextArea y la discusión sobre widgets. Parece excluir ModelForm.
¡Gracias!
Si desea anular el widget para un campo de formulario en general, la mejor manera es establecer el atributo de widgets
de la clase ModelForm Meta
:
Para especificar un widget personalizado para un campo, use el atributo de widgets de la clase Meta interna. Esto debería ser un diccionario que asigne nombres de campos a clases o instancias de widgets.
Por ejemplo, si desea que un CharField para el atributo de nombre de Autor sea representado por un
<textarea>
lugar de su predeterminado<input type="text">
, puede anular el widget del campo:
from django.forms import ModelForm, Textarea from myapp.models import Author class AuthorForm(ModelForm): class Meta: model = Author fields = (''name'', ''title'', ''birth_date'') widgets = { ''name'': Textarea(attrs={''cols'': 80, ''rows'': 20}), }
El diccionario de widgets acepta instancias de widgets (por ejemplo, Textarea (...)) o clases (por ejemplo, Textarea).
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-fields