Django - 将CSS类添加到SplitDateTimeWidget?

Dan*_*Dan 2 forms django

我使用SplitDateTimeWidget来覆盖模型表单中的字段.有没有办法将css类分配给由此创建的各个字段?

widgets = {
              'my_field': SplitDateTimeWidget(),
                }
Run Code Online (Sandbox Code Playgroud)

任何建议表示赞赏

在我尝试了你的代码后Brandon:

如果我在没有通过attrs的情况下尝试它,我会得到:'NoneType'对象不可迭代

对于线attrs_dict = dict(attrs).

如果我确实包含了attrs,我得到:'tuple'对象没有属性'copy'

at /usr/local/lib/python2.6/dist-packages/django/forms/widgets.py in init,第147行

Bra*_*don 8

是的,您可以传入attrs = {'class':'your_class'},但它会将该类应用于DateInput和TimeInput.

如果您需要为这两个字段添加不同的类,您可能需要扩展SplitDateTimeWidget,覆盖init.

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'}))
Run Code Online (Sandbox Code Playgroud)

我在Django 1.3中测试了这个,当在一个名为'test_field'的forms.DateTimeField上使用该小部件时,它将输出以下html:

<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">
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种方法来复制进入的attrs以保留可能存在的任何其他参数,但我遇到了错误,不幸的是我今天已经没时间了.这应该让你前进,但只允许你修改字段的类attr.