get_form_class()
函数是 Django 中全局的一个函数,用于获取视图中使用的表单类。它根据请求中的内容自动选择表单类,并返回该表单类。
get_form_class() 函数的声明如下:
def get_form_class(self):
"""
Return the form class to use.
Defaults to using self.form_class.
"""
return self.form_class
get_form_class()
函数中包含一个属性 form_class
,该属性用于指定模型实例使用的表单类。通常情况下,Django 将会优先使用该属性的值来返回表单类。
当使用 get_form_class()
方法时,有以下两种用法:
1. 使用默认的表单类
默认情况下(即未指定 form_class
属性),get_form_class()
方法将返回视图函数中定义的表单类。当然,这需要在视图函数中指定相应的表单类。示例如下:
from django import forms
from django.views.generic.edit import CreateView
class UserForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField(max_length=150)
class CreateUserView(CreateView):
model = User
fields = ['name', 'email']
template_name = 'create_user.html'
def form_valid(self, form):
# Process valid form data
return super(CreateUserView, self).form_valid(form)
def form_invalid(self, form):
# Process invalid form data
return super(CreateUserView, self).form_invalid(form)
def get_form_class(self):
return UserForm
上面的例子定义了一个表单类 UserForm
,并将其绑定至 CreateUserView
视图中。通过重载 get_form_class()
函数可以在行动时强制 Django 使用该表单类。
2. 自定义所需的表单类
通过实现自己的 get_form_class()
函数,您可以控制使用哪个表单类。此策略最常用于在运行时动态选择表单类。示例代码如下:
from django import forms
from django.views.generic.edit import CreateView
class UserForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField(max_length=150)
class UserForm2(forms.Form):
username = forms.CharField(max_length=100)
password = forms.CharField(max_length=100)
class CreateUserView(CreateView):
model = User
fields = ['name', 'email']
template_name = 'create_user.html'
def form_valid(self, form):
# Process valid form data
return super(CreateUserView, self).form_valid(form)
def form_invalid(self, form):
# Process invalid form data
return super(CreateUserView, self).form_invalid(form)
def get_form_class(self):
# Select form based on some condition
if condition:
return UserForm
else:
return UserForm2
在上述代码中,根据某种条件 condition
返回不同的表单类,可以实现动态选择表单类的目的。
此外,您还可以使用 **kwargs
参数来传递额外的参数。在上面的例子中,假设有一个条件为 condition
,你想将这个条件传递给列表视图,就可使用以下代码:
def get_form_class(self, **kwargs):
if self.condition:
return UserForm
else:
return UserForm2
通过这种方式,调用者可以使用以下方式向视图提供条件:
CreateUserView.as_view(condition=True)