[英]How do I set initial form values of CreateView view using POST only (and not GET)?
[英]How do I set initial values on a Django form using CreateView
我有一个表单并希望在字段中设置一些默认值。 我使用View class 的原始解决方案有效
# forms.py
ResultForm(forms.ModelForm):
class Meta:
model = Result
fields = ("date", "club", "goals_for", "goals_against")
...
@staticmethod
def get_initial():
initial = {
'date': datetime.today().date(),
'goals_for': 0,
'goals_against': 0,
}
return initial
和
# views.py
class EnterResultView(View):
template = 'results/enter_result.html'
def get(self, request):
form_class = ResultForm()
form_class.initial = form_class.get_initial()
context = {
'form_class': form_class
}
return render(request, self.template, context)
但是,如果我转换为CreateView ,我将无法初始化这些字段
# views.py
class EnterResultView(CreateView):
template_name = 'results/enter_result.html'
form_class = ResultForm
form_class.initial = form_class.get_initial()
我必须做什么?
[编辑添加模板]
<!-- results/enter_result.html -->
...
{% for field in view.form_class %}
<tr>
<td style="text-align: right">{{ field.label_tag }}</td>
<td>{{ field }}</td>
{% if field.errors %}
{% for error in field.errors %}
<td class="form-error">{{ error }}</td>
{% endfor %}
{% endif %}
</tr>
{% endfor %}
带有FormMixin
[Django-doc]的视图有一个.get_initial()
方法 [Django-doc] ,因此您可以覆盖它:
class EnterResultView(CreateView):
template_name = 'results/enter_result.html'
form_class = ResultForm
def get_initial(self):
return self.form_class.get_initial()
CreateView
构造一个表单并将其作为form
传递给视图,您不应使用view.form_class
,因为它将构造另一个(新)表单,没有任何参数:
{% for field in form %}
…
{% endfor %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.