2011-07-19 14 views
2

SplitDateTimeWidgetを使用して、モデルフォームのフィールドをオーバーライドしました。 これで作成された個々のフィールドにCSSクラスを割り当てる方法はありますか?Django - CSSクラスをSplitDateTimeWidgetに追加しますか?

widgets = { 
       'my_field': SplitDateTimeWidget(), 
       } 

ご了承ください。

私はあなたのコードブランドンを試した後:

私は私が手attrsにを渡さずにそれをしようとした場合: 'NoneType' オブジェクトは= dictの(ATTRS)ラインattrs_dictのために反復可能

ではありません。

私はattrsにを含める場合、私が手: 'タプル' オブジェクトは/usr/local/lib/python2.6/dist-packages/django/forms/widgetsで何の属性 'コピー'

を持っていません。 py in 、行147

答えて

8

はい、attrs = {'class': 'your_class'}を渡すことはできますが、クラスはDateInputとTimeInputの両方に適用されます。

両方のフィールドに別のクラスを追加する必要がある場合は、おそらくSplitDateTimeWidgetを拡張してinitをオーバーライドする必要があります。

<label for="id_test_field_0">Test field:</label> 
<input id="id_test_field_0" class="foo" type="text" name="test_field_0"> 
<input id="id_test_field_1" class="bar" type="text" name="test_field_1"> 

私はにさまざまな方法を試してみた:私はforms.DateTimeFieldにそのウィジェットを使用して出力次のHTMLは、「test_fieldを」と呼ばれますジャンゴ1.3、でこれをテストしてみた

class MySplitDateTimeWidget(SplitDateTimeWidget): 
    def __init__(self, attrs=None, date_format=None, time_format=None): 
     date_class = attrs.pop('date_class') 
     time_class = attrs.pop('time_class') 

     widgets = (DateInput(attrs={'class' : date_class}, format=date_format), 
       TimeInput(attrs={'class' : time_class}, format=time_format)) 
     super(SplitDateTimeWidget, self).__init__(widgets, attrs) 

#forms.py 

class MyForm(forms.Form): 
    test_field = forms.DateTimeField(widget=MySplitDateTimeWidget(attrs={'date_class' : 'foo', 'time_class' : 'bar'})) 

そこにいるかもしれない他のパラメータを保存するために入ってくるattrsをコピーしますが、私はエラーに遭遇しています。残念ながら、今日は時間がなくなりました。これはあなたに行かなければなりませんが、フィールドのクラスattrの変更のみを許可します。

+0

こんにちは、ありがとうございます。私はこれを使用しようとしましたが、次のエラーが表示されます。 'tuple'オブジェクトに属性 'copy'がありません – Dan

+0

attrsをdictに変換するコードサンプルを更新しました。試してみてください。 – Brandon

+0

もう一度、元の質問に回答を書いたが、コメントボックスでは適切な書式設定ができなかった。 – Dan

関連する問題