2012-03-26 24 views
18

免責事項:私はPythonとDjangoの初心者ですが、Drupalプログラミングの経験があります。選択ボックスで、私の形で初心者:Django ModelFormオーバーライド

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

どのように私は、このデフォルトのウィジェットを上書きすることができますか?次のことはOKですか、何か不足していますか?例のみのTextAreaを説明し、ウィジェットの議論はのModelFormを除外するように思われるので、

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

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-field-types-or-widgetsを読んだ後、私は失われています。

ありがとうございます!

答えて

58

あなたは一般的にフォームフィールド用のウィジェットを上書きしたい場合は、最良の方法は、ModelForm Metaクラスのwidgets属性を設定することです:ウィジェットの属性を使用して、フィールドのカスタムウィジェットを指定するには

を内側のメタクラスの。これはフィールド名をウィジェットクラスまたはインスタンスにマッピングするディクショナリでなければなりません。

たとえば、あなたが代わりにそのデフォルト<input type="text"><textarea>で表現する著者のname属性にCharFieldですしたい場合は、フィールドのウィジェットオーバーライドすることができます。

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

をウィジェットの辞書がいずれかの受け入れウィジェットインスタンス(Textarea(...)など)またはクラス(Textareaなど)

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