Django - 为自定义小部件指定默认属性

标签 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 放在了错误的位置。我应该在哪里指定它?

最佳答案

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

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

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

这是一个相当幼稚的实现。您可能需要添加一些额外的检查,以确保不会覆盖 kwargs['attrs'] 中的任何现有项目。请注意,我们已经子类化了 DateTimeInput 而不是 TextInput

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

关于Django - 为自定义小部件指定默认属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9905844/

相关文章:

带有多对多内联的 Django 模型表单集

django - 在 django admin 中添加指向内联项目的完整更改表单的链接?

python - Django:直接从 request.POST ["item"处理数据的风险]

python - Django Map Widgets 绘制多边形

python - Django错误: TypeError: __init__() got an unexpected keyword argument 'attrs'

python - ZipExtFile 到 Django 文件

python - 在基于 Django 类的 View 中传递查询参数

python - Django 可以和 py2exe 一起使用吗?

python - Django 'DateField' 对象没有属性 'is_hidden'

python - 无法覆盖 django 中 NumberInput 字段的步骤属性