2012-03-26 11 views
18

Descargo de responsabilidad: soy un principiante con Python y Django, pero tengo experiencia en programación de Drupal.Principiante: widget de anulación Django ModelForm

¿Cómo puedo anular el control por defecto de este:

#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á OK 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 el único ejemplo discute TextArea y widgets de la discusión parece excluir ModelForm.

Gracias!

Respuesta

58

Si desea anular el widget para un formfield en general, la mejor manera es para establecer el atributo widgets de la clase ModelForm Meta:

Para especificar un widget personalizado para un campo, el uso de atributos de los widgets de la clase Meta interna. Esto debería ser un nombre de campo de asignación de diccionario a clases o instancias de widgets.

Por ejemplo, si desea que el un CharField para el atributo de nombre del autor a ser representado por un <textarea> en lugar de su valor por defecto <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 cualquiera instancias de widgets (p. ej., Textarea (...)) o clases (p. ej., Textarea).

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-fields

Cuestiones relacionadas