2017-06-12 22 views
0

Djangoの新機能です。 Django CreateViewで作成したフォームにカスタムスタイリングを追加する方法

私はPythonの汎用ビューを使用してフォームを作成するために管理しているいくつかのチュートリアル( CREATEVIEW)に続いて、私は
class Question(models.Model): 
    title = models.CharField(max_length=200) 
    body = models.TextField(max_length=2000) 
    category = models.CharField(max_length=50) 
    votes = models.IntegerField(default=0) 
    asked_date = models.DateTimeField(default=datetime.now) 

と私はビュークラス

を作成したこのモデルを使用して「質問」モデル

を持っています
class QuestionCreate(CreateView): 
    model = Question 
    fields = ['title', 'body', 'category'] 

これは素晴らしいHTMLフォームを生成します。しかし、どのように各フィールドにCSS属性を渡すのですか?あなたが直接あなたがModelFormを作成し、作成ビューでform_class = FooFormを使用する必要があり、そのためのCreateViewcssを追加することができず、このModelFormにあなたがフィールドに特定のクラスを使用し、それらのスタイルをCSSを使用することができます

答えて

1

を必要に応じて、質問のためのモデルのフォームを作成し、ビューを作成し、

class QuestionForm(forms.ModelForm): 

    class Meta: 
     model = Question 
     fields = ('myfield1', 'myfield2) 
     widgets = { 
     'myfield1': forms.TextInput(attrs={'class': 'myfieldclass'}), 
     } 

たり、SPEのためのinitメソッドをオーバーライドすることができますにそれを渡すことができすべてのフィールドのための特定のクラス、そして、

def __init__(self, *args, **kwargs): 
    super(MyForm, self).__init__(*args, **kwargs) 
    self.fields['myfield1'].widget.attrs.update({'class' : 'myfieldclass'}) 

をcifying、CreateViewの属性form_classに渡し、

class QuestionCreate(CreateView): 
    model = Question 
    form_class = QuestionForm 
1
class FooForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(FooForm, self).__init__(*args, **kwargs) 
     self.fields['field1'].widget.attrs = { 'class': 'fooclass' } 

    class Meta: 
     model = FooModel 
     fields = ['field1', 'field2'] 

関連する問題