我正在尝试使用 Django 1.5 中的通用视图,这有点令人困惑。到目前为止,我一直在使用 views.py 中的函数。我同意函数方法有更多的样板代码,但同时作为开发人员,你对它有更多的控制权。不过为了学习。让我们考虑这个部分代码:
if request.method == 'POST':
if 'invitation' in request.session:
invitation = Invitation.objects.get(id=request.session['invitation'])
profile = invitation.sender.get_profile()
form = RegistrationForm(request.POST, is_accept_invite = True, _email = invitation.email)
else:
form = RegistrationForm(request.POST)
if form.is_valid():
...
我理解它的方式,通用视图考虑三种状态:GET,POST -> Valid,POST -> invalid()。
但是上面的代码是 POST -> form.validation 之前的条件,以相应地实例化表单
这将是我提出的一个通用视图:
class RegisterView(FormView):
template_name = 'register.html'
form_class = RegisterForm
success_url = '/registration_successfull/'
def form_valid(self, form):
...
def form_invalid(self, form):
...
我想我需要重写get_form(form_class)
或get_form_kwargs()
检查我的 request.session 并相应地实例化 RegistrationForm。那是对的吗?有什么例子可以做到这一点吗?我在文档中找不到任何示例。