所以我试图将我的表单的模型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
答案 0 :(得分:1)
尝试更改方法get_form
中的以下行:
form = super(newenv_form, self)
为:
form = super(newenv_form, self).get_form(form)
请遵循约定并在python中使用PascalCase作为类名。
你可以打电话给这个班级EnvironmentCreateView
。可以调用其他通用视图类,例如EnvironmentListView
,EnvironmentDetailView
,EnvironmentUpdateView
,EnvironmentDeleteView
。
对所有模型类使用相同的模式将产生易于理解的代码。
编辑(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