Django 1.11 CreateView为datefields添加datepicker

时间:2017-10-13 18:12:14

标签: django datepicker

所以我试图将我的表单的模型Datefield输出更改为类似于DatepickerWidget in CreateView的Datepicker

使用html模板生成表单:

{% for field in form %}
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <span class="text-danger small">{{ field.error }}</span>
        </div>
        <label class="control-label col-sm-2">{{field.label_tag}}</label>
        <div class="col-sm-10">{{field}}</div>
    </div>
{% endfor %}

以下是我尝试过的观点:

class newenv_form(generic.CreateView):
    model = Environment
    fields =['name', 'description', 'creation_date', 'status','status_update_date']
    template_name = 'catalogue/new_env.html'

    #Does not work
    def get_form(self, form):
        form = super(newenv_form, self)
        form.fields['creation_date','status_update_date'].widget = forms.DateInput(attrs={'class':'datepicker'})
        return form

2 个答案:

答案 0 :(得分:1)

尝试更改方法get_form中的以下行:

form = super(newenv_form, self)

为:

form = super(newenv_form, self).get_form(form)

请遵循约定并在python中使用PascalCase作为类名。 你可以打电话给这个班级EnvironmentCreateView。可以调用其他通用视图类,例如EnvironmentListViewEnvironmentDetailViewEnvironmentUpdateViewEnvironmentDeleteView
 对所有模型类使用相同的模式将产生易于理解的代码。

编辑(2017-10-24):

关于你的评论,这是一个进一步的解释。虽然很难给出正确的远程诊断,但我建议进行以下更改:

class EnvironmentCreateView(generic.CreateView):
    # class attributes ...
    def get_form(self, form_class=None):
        form = super(EnvironmentCreateView, self).get_form(form_class)
        # further code ...

基本变化以粗体显示。更改类名以符合约定。此外,参数form也更改为form_class以满足对话。我特别强调惯例,因为它使熟悉框架的其他人很容易理解代码 重要的变化是form_class的初始值为None 这应该可以解决错误的问题 在方法体中,您使用super调用父方法,然后在您的自定义代码后面写。

请查看generic.CreateView的文档。它继承了generic.FormMixin等。这是使用方法get_form的类。

答案 1 :(得分:0)

这是有效的,但它是一个限制选择的下拉日期选择器

def get_form(self):
        '''add date picker in forms'''
        from django.forms.extras.widgets import SelectDateWidget
        form = super(EnvironmentCreateView, self).get_form()
        form.fields['creation_date'].widget = SelectDateWidget()
        return form

请注意,我删除了导致问题的form_class