基于 Class 的视图中的 Django 有界表单 - CreateView class
Django Bounded forms in Class based views - CreateView class
我将如何在基于 CreateView
class 的视图中覆盖 GET
方法以生成 有界形式 ,通过它我意味着它将在生成的表单中为其某些字段设置预设值(我需要使用一些默认值来实例化表单,而不是使用 CreateView 默认使用的表单的空白版本)。
我试着查看 https://ccbv.co.uk/projects/Django/1.6/django.views.generic.edit/CreateView/,但不太了解此 class 中 GET
方法的流程。
BaseCreateView
def get(self, request, *args, **kwargs):
self.object = None
return super(BaseCreateView, self).get(request, *args, **kwargs)
ProcessFormView
Handles GET requests and instantiates a blank version of the form.
def get(self, request, *args, **kwargs):
"""
Handles GET requests and instantiates a blank version of the form.
"""
form_class = self.get_form_class()
form = self.get_form(form_class)
return self.render_to_response(self.get_context_data(form=form))
由于 CreateView 使用 modelFormFactory 生成空表单,我究竟应该在哪里覆盖 get 来实例化我的表单。
这不是绑定表单:绑定表单是根据 POST 数据创建并经过表单验证的表单。
要为新表单提供初始数据,您需要覆盖 get_initial
方法。或者,如果该数据是静态的,您可以只提供 class 级 initial
字典。
编辑
def get_initial(self):
if request.GET.get('codereview-get'):
initial = {'stream_name': 'TROI'}
else:
initial = {}
return initial
我将如何在基于 CreateView
class 的视图中覆盖 GET
方法以生成 有界形式 ,通过它我意味着它将在生成的表单中为其某些字段设置预设值(我需要使用一些默认值来实例化表单,而不是使用 CreateView 默认使用的表单的空白版本)。
我试着查看 https://ccbv.co.uk/projects/Django/1.6/django.views.generic.edit/CreateView/,但不太了解此 class 中 GET
方法的流程。
BaseCreateView
def get(self, request, *args, **kwargs):
self.object = None
return super(BaseCreateView, self).get(request, *args, **kwargs)
ProcessFormView
Handles GET requests and instantiates a blank version of the form.
def get(self, request, *args, **kwargs):
"""
Handles GET requests and instantiates a blank version of the form.
"""
form_class = self.get_form_class()
form = self.get_form(form_class)
return self.render_to_response(self.get_context_data(form=form))
由于 CreateView 使用 modelFormFactory 生成空表单,我究竟应该在哪里覆盖 get 来实例化我的表单。
这不是绑定表单:绑定表单是根据 POST 数据创建并经过表单验证的表单。
要为新表单提供初始数据,您需要覆盖 get_initial
方法。或者,如果该数据是静态的,您可以只提供 class 级 initial
字典。
编辑
def get_initial(self):
if request.GET.get('codereview-get'):
initial = {'stream_name': 'TROI'}
else:
initial = {}
return initial