2011-07-19 78 views
2

我已经使用SplitDateTimeWidget覆盖了我的模型表单中的一个字段。 有没有办法将css类分配给由此创建的各个字段?Django - 将CSS类添加到SplitDateTimeWidget?

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

任何意见赞赏。

后,我想你的代码布兰登:

如果我尝试没有经过ATTRS我得到: 'NoneType' 对象不是可迭代

为线attrs_dict =字典(ATTRS)。

如果我做包括ATTRS,我得到: '元组' 对象有没有属性 '复制'

在/usr/local/lib/python2.6/dist-packages/django/forms/widgets。 py in init,line 147

回答

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'})) 

我在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"> 

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

+0

嗨,感谢您的帮助。我试过使用这个,但我得到以下错误:'元组'对象没有属性'复制' – Dan

+0

我更新了我的代码示例将attrs转换为字典。请试试看。 – Brandon

+0

再次感谢,我在原始问题中写了一个回复,评论框不允许正确的格式。 – Dan