Django 表单向导 - 为文本输入字段设置默认值
Django Form Wizard - Setting default value for text input field
我正在为我的 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(),
}
我认为您可以在小部件中简单地完成,只需测试一下,如果 val 为空,如果为空,则像这样输入您的默认值:
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()
if val == None or val == '':
val = '2015-11-29' # or use datetime.now(), or compute another good default
select_html = inp.render(field % name, val, local_attrs)
return select_html
我正在为我的 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
但是,我更愿意让用户简单地输入年份和日期,而不是摸索着下拉菜单。因此,对于那些,我已经转换了小部件以利用它:
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(),
}
我认为您可以在小部件中简单地完成,只需测试一下,如果 val 为空,如果为空,则像这样输入您的默认值:
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()
if val == None or val == '':
val = '2015-11-29' # or use datetime.now(), or compute another good default
select_html = inp.render(field % name, val, local_attrs)
return select_html