Django - 为Custom小部件指定默认attr

时间:2012-03-28 10:43:29

标签: django django-forms django-widget

我创建了这个小部件

class DateTimeWidget(forms.TextInput):
  attr = {'class': 'datetimepicker'}
  class Media:
    js = ('js/jquery-ui-timepicker-addon.js',)

然后我在表格上使用它

class SessionForm(forms.ModelForm):
  class Meta:
    model = Session
  def __init__(self, *args, **kwargs):
    super(SessionForm, self).__init__(*args, **kwargs)
    self.fields['start_time'].widget = DateTimeWidget()
    self.fields['end_time'].widget = DateTimeWidget()

没有css class适用于我的字段(我希望 datetimepicker 适用于start_timeend_time)。
我想我已将attr放在错误的位置。我应该在哪里指定它?

2 个答案:

答案 0 :(得分:4)

首先,html属性存储在widget.attrs中,而不是attr中。

其次,您无法在窗口小部件定义中声明attrs = {'class': 'datetimepicker'},因为__init__方法将覆盖self.attrs

相反,您可以在attrs方法中设置__init__

这是一个相当天真的实现。您可能需要添加一些额外的检查,以确保不覆盖kwargs['attrs']中的任何现有项目。请注意,我们已将DateTimeInput代替TextInput

class DateTimeWidget(DateTimeInput):
    def __init__(self, *args, **kwargs):
        kwargs['attrs'] = {'class': 'datepicker'}
        super(DatePickerWidget, self).__init__(*args, **kwargs)

答案 1 :(得分:3)

我看到了多个问题:

class SessionForm(forms.ModelForm):
    class Meta:
        model = Session
        widgets = {'start_time': DateTimeWidget(),
                   'end_time': DateTimeWidget()}