3

我已经创建了这个小部件

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()

没有 cssclass应用于我的字段(我期望datetimepicker应用于两个start_time& end_time)。
我想我放attr错了位置。我应该在哪里指定它?

4

2 回答 2

5

首先,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)
于 2012-03-28T13:02:18.033 回答
3

我看到多个问题:

.

class SessionForm(forms.ModelForm):
    class Meta:
        model = Session
        widgets = {'start_time': DateTimeWidget(),
                   'end_time': DateTimeWidget()}
于 2012-03-28T11:26:17.233 回答