[英]Django FormView inheritance
我是python和django的新手,有人可以在基于django / python类的视图中向我解释继承机制吗? 示例在这里:
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
在模板中创建表单,则FormViewA
form_valid
的代码仍将运行,并且会看到以下输出:
in FormViewB
in FormViewA
请向我解释,我想念什么,为什么覆盖方法中的代码在这里仍然有效? 是否像c ++中那样被覆盖? 非常感谢你。
因为你调用super()
在FormViewB
,这意味着form_valid
的方法FormViewA
。 如果您不想在'in FormViewA'
看到,则应该
根本不要调用super()
:在这种情况下,您必须确保super不包含所需的任何关键代码。 因为当您跳过调用FormViewA.super()
您也不会调用FormView.super()
。
直接从FormView
继承。 如果FormViewA
和FormViewB
都有通用代码,则可以将此代码提取到另一个方法中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.