get_form_kwargs()
函数是Django中form视图函数的一个方法,用于获取form的传递参数。在Django中定义FormView或CreateView等视图时,我们会定义一个form_class属性至少一个model_form_class父类。
实例1:
class CustomFormView(FormView):
template_name = "form.html"
form_class = CustomForm
success_url = reverse("success_view")
def form_valid(self, form):
form.save()
return super().form_valid(form)
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
# 做一些自己的操作
return kwargs
在上面这个例子中,get_form_kwargs()
函数会返回一个字典,用于传递参数到CustomForm
中。当View.dispatch()方法被调用并执行它们的完成时,kwargs将由CustomForm
类中的__init__()方法获取。kwargs中的值由InitialValue
,POST
,GET
以及其他类似QueryDict的字典对象填充。
例如,我们可以在kwargs中加入一个变量’user’,如下所示:
class CustomFormView(FormView):
template_name = "form.html"
form_class = CustomForm
success_url = reverse("success_view")
def form_valid(self, form):
form.save()
return super().form_valid(form)
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
在form.py中我们通过以下方式访问user:
class CustomForm(forms.Form):
name = forms.CharField()
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
super().__init__(*args, **kwargs)
当Django框架在实例化form时,会调用__init__()
函数,我们通过pop()函数取出’username’的值并存储在self.user
变量中。
实例2:
class CustomCreateView(CreateView):
template_name = "create.html"
form_class = CustomForm
success_url = reverse("success_view")
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
if self.request.GET and 'initial' in self.request.GET:
try:
initial = json.loads(self.request.GET.get('initial'))
kwargs['initial'] = initial
except:
pass
return kwargs
在上面的例子中,get_form_kwargs()
函数会解析通过查询字符串传递的initial
变量值。如果获取到了initial
变量值,我们会将其设置到form实例中的initial
这个属性。这个变量被用于传递给form的初始数据。
需要注意的是:在使用get_form_kwargs()
方法时,必须在重写方法的时候调用父类型的方法。这样才能保证在用户定义的数据下面,不丢失原始的kwargs。
总结:
get_form_kwargs()
方法可以让你在在创建form时,添加一些自定义的参数。通常情况下,这些参数可以从视图请求对象,查询字符串等中提取。这是一个非常实用的方法,可以帮助我们在创建form的时候,使用一些请求相关的初始值。