我正在尝试使用Book Django释放来学习Django。在第9章中,作者将表单显示方法重写为基于类的视图(CBV)。我试图理解为什么在调用类属性时使用了一组括号。我假设它是因为class属性将存储一个表单对象,但我想进一步理解它。
from django.shortcuts import render, get_object_or_404, redirect
from .models import Tag, Startup
from .forms import TagForm
from django.views.generic import View
class PostCreate(View):
form_class = PostForm
template_name = 'blog/post_form.html'
def get(self, request):
return render(
request,
self.template_name,
{'form': self.form_class()})
def post(self, request):
bound_form = self.form_class(request.POST)
if bound_form.is_valid():
new_post = bound_form.save()
return redirect(new_post)
else:
return render(
request,
self.template_name,{'form': bound_form})
如您所见,在14行代码
{'form': self.form_class()})
但是在最后一行,代码是
self.template_name,
我很困惑为什么作者在第一个类属性而不是第二个属性上使用括号。你能解释一下吗
谢谢
答案 0 :(得分:1)
我很困惑为什么作者在第一个类属性而不是第二个属性上使用括号。你能解释一下吗。
在get
中,作者使用了self.form_class()
,即实际为PostForm()
,因为self.form_class
只是对PostForm
类的引用,所以当self.form_class
括号时即self.form_class()
它是PostForm
的实例,没有传递任何参数。
和
post
方法作者中的正在将request.POST
传递给self.form_class
,这只是PostForm
的引用,所以现在它是PostForm(request.POST)
并将其分配给bound_form
变量bound_form
,因此self.view.endEditing(true)
按原样传递。
希望这可以解决你的困惑