【问题标题】:Django Form Wizard - Setting default value for text input fieldDjango 表单向导 - 为文本输入字段设置默认值
【发布时间】: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


    【解决方案1】:

    我认为您可以简单地在小部件中执行此操作,只需测试,如果 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-30
      • 2021-04-07
      • 2013-03-29
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多