Django FormView继承
Django FormView inheritance
我是 python 和 django 的新手,有人可以向我解释一下基于 django/python class 的视图中的继承机制吗?例子在这里:
class FormViewA(FormView):
form_class = MyFormClass
template_name = 'mytemplate.html'
def get_success_url(self):
return reverse('my_url')
def form_valid(self, form):
form.save()
print "in FormViewA"
return super(FormViewA, self).form_valid(form)
class FormViewB(FormViewA):
def form_valid(self, form):
form.save()
print "in FormViewB"
return super(FormViewB, self).form_valid(form)
如果我使用 FormViewB
在我的模板中创建表单,来自 form_valid
和 FormViewA
的代码仍然 运行 我看到这个输出:
in FormViewB
in FormViewA
请解释一下,我错过了什么,为什么覆盖方法的代码在这里仍然有效?它是否像在 C++ 中一样被覆盖?非常感谢。
因为你在FormViewB
中调用了super()
,也就是FormViewA
的form_valid
方法。如果你不想看到 'in FormViewA'
你应该
根本不要调用 super()
:在这种情况下,您必须确保 super 不包含您需要的任何关键代码。因为当您跳过调用 FormViewA.super()
时,您也不会调用 FormView.super()
。
直接继承自FormView
。如果你在FormViewA
和FormViewB
中都有共同的代码,你可以将这段代码提取到另一个方法中。
我是 python 和 django 的新手,有人可以向我解释一下基于 django/python class 的视图中的继承机制吗?例子在这里:
class FormViewA(FormView):
form_class = MyFormClass
template_name = 'mytemplate.html'
def get_success_url(self):
return reverse('my_url')
def form_valid(self, form):
form.save()
print "in FormViewA"
return super(FormViewA, self).form_valid(form)
class FormViewB(FormViewA):
def form_valid(self, form):
form.save()
print "in FormViewB"
return super(FormViewB, self).form_valid(form)
如果我使用 FormViewB
在我的模板中创建表单,来自 form_valid
和 FormViewA
的代码仍然 运行 我看到这个输出:
in FormViewB
in FormViewA
请解释一下,我错过了什么,为什么覆盖方法的代码在这里仍然有效?它是否像在 C++ 中一样被覆盖?非常感谢。
因为你在FormViewB
中调用了super()
,也就是FormViewA
的form_valid
方法。如果你不想看到 'in FormViewA'
你应该
根本不要调用
super()
:在这种情况下,您必须确保 super 不包含您需要的任何关键代码。因为当您跳过调用FormViewA.super()
时,您也不会调用FormView.super()
。直接继承自
FormView
。如果你在FormViewA
和FormViewB
中都有共同的代码,你可以将这段代码提取到另一个方法中。