【发布时间】:2016-02-25 19:14:33
【问题描述】:
我正在为我的 ModelForm 向导中的日期字段制作一个小部件。我想用一个小部件来实现这一点,这样我就可以保留 Django 的 ModelForm 的所有不错的验证功能。
我在django.forms.extras.widgets.SelectDateWidget 的这一部分之后为我的小部件建模:
def create_select(self, name, field, value, val, choices, none_value):
if 'id' in self.attrs:
id_ = self.attrs['id']
else:
id_ = 'id_%s' % name
choices.insert(0, none_value)
local_attrs = self.build_attrs(id=field % id_)
s = Select(choices=choices)
select_html = s.render(field % name, val, local_attrs)
return select_html
请注意,我可以通过影响 choices 变量来添加到列表选项列表中,该变量通过 django.forms.widgets import Select 更改最终的 html 呈现
不过,我更愿意让用户简单地输入年份和日期,而不是摸索下拉菜单。因此,对于那些,我已将小部件转换为利用它:
def create_input(self, name, field, value, val, none_value):
if 'id' in self.attrs:
id_ = self.attrs['id']
else:
id_ = 'id+%s' % name
local_attrs = self.build_attrs(id=field % id_)
inp = TextInput()
select_html = inp.render(field % name, val, local_attrs)
return select_html
它工作得很好,但在这里设置一个默认值会很酷。这可能来自小部件或表单吗?:
class EventRegistrationForm4(forms.ModelForm):
class Meta:
model = Event
fields = ['start_date', 'start_time', 'end_time']
this_year = datetime.date.today().year
widgets = {
'start_date': InputDateWidget(),
}
【问题讨论】:
标签: python django django-forms modelform django-formwizard