4

ModelForm を使用していて、Django forms.RadioSelect ウィジェットに css クラスを設定しようとしています。

class Meta:
    model = models.MyModel
    fields = ('rating',)
    widgets = {
      'rating': forms.RadioSelect(attrs={'class':'star'}),
    }

しかし、class='star' は html でレンダリングされません。

私も使ってみました:

def __init__(self, *args, **kwargs):
    super(MyModelForm, self).__init__(*args, **kwargs)
    self.fields['rating'].widget.attrs['class'] = 'star'

これも機能しませんでした。forms.Textarea ウィジェットで同じことを試したところ、レンダリングされた css クラスを取得できました。

ここで何か間違ったことをしていますか、それとも RadioSelect が class 属性をサポートしていないだけですか (すべてのラジオ入力にクラス名を適用したい)?

4

2 に答える 2

8

チェックボックス ウィジェットとラジオ ウィジェットは、他のウィジェットのように継承されませんInput

class 属性は で機能しますがRadioSelect、すべての無線入力に個別に適用されます。

たとえば、次の形式を考えてみましょう。

from django import forms
class MyForm(forms.Form):
    my_field = forms.ChoiceField(widget=forms.RadioSelect(attrs={'class': 'star'}), choices=(('x', 'x'), ('y', 'y'),))

テンプレートに次の html を出力します。

<tr><th><label for="id_my_field_0">My field:</label></th>
  <td>
    <ul>
      <li><label for="id_my_field_0"><input value="x" type="radio" class="star" name="my_field" id="id_my_field_0" /> x</label></li>
      <li><label for="id_my_field_1"><input value="y" type="radio" class="star" name="my_field" id="id_my_field_1" /> y</label></li>
    </ul>
  </td>
</tr>

クラスは各input要素に適用されることに注意してください。

于 2013-01-04T16:42:13.463 に答える
-1

このライブラリを使用できます: https://pypi.python.org/pypi/django-widget-tweaks

これにより、次のことが可能になります。

{% load widget_tweaks %}
<!-- add 2 extra css classes to field element -->
{{ form.title|add_class:"css_class_1 css_class_2" }}
于 2013-03-22T13:08:32.853 に答える