我已使用 SplitDateTimeWidget 覆盖模型表单中的字段。 有没有办法将 css 类分配给由此创建的各个字段?
widgets = {
'my_field': SplitDateTimeWidget(),
}
任何建议表示赞赏。
在我尝试了你的代码后布兰登:
如果我在不传递属性的情况下尝试它,我会得到: “NoneType”对象不可迭代
对于 attrs_dict = dict(attrs) 行。
如果我确实包含属性,我会得到: “tuple”对象没有属性“copy”
位于 init 中的/usr/local/lib/python2.6/dist-packages/django/forms/widgets.py,第 147 行
最佳答案
是的,您可以传入 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'}))
我已经在 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">
我尝试了各种方法来复制传入的属性以保留可能存在的任何其他参数,但我遇到了错误,不幸的是我今天已经没有时间了。这应该可以帮助您继续操作,但只允许您修改字段的类属性。
关于Django - 将 CSS 类添加到 SplitDateTimeWidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6752792/