2012-03-26 11 views
18

Nota prawna: Jestem początkującym użytkownikiem Pythona i Django, ale mam doświadczenie w programowaniu Drupala.Początkujący: Widżet nadpisania Django ModelForm

Jak mogę zastąpić domyślny widżet tego:

#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') 

w mojej postaci z wybranej skrzynki? Czy poniższe rzeczy są poprawne, czy też czegoś brakuje?

#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)} 

Po przeczytaniu https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-field-types-or-widgets, jestem zgubiony, gdyż przykład omawia tylko TextArea i dyskusja widgety wydaje się wykluczać ModelForm.

Dzięki!

Odpowiedz

58

Jeśli chcesz nadpisać widget dla formfield w ogóle, najlepszym sposobem jest ustawienie atrybutu klasy ModelForm Metawidgets:

Aby określić widget niestandardową polu, należy przypisywać widgety wewnętrznej klasy Meta. Powinien to być słownik mapujący nazwy pól na klasy lub instancje widżetów.

Na przykład, jeśli chcesz się Charfield atrybutu nazwisko autora, aby być reprezentowana przez <textarea> zamiast domyślnej <input type="text"> można przesłonić widget dziedzinie to:

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}), 
     } 

Słownik widgety akceptuje albo widgety (np. Textarea (...)) lub klasy (np. Textarea).

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

Powiązane problemy