我创建了这个小部件
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_time
和 end_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/