我是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++中那样被覆盖?非常感谢。
发布于 2016-03-10 02:41:52
因为您正在FormViewB中调用FormViewB,这意味着FormViewA的form_valid方法。如果你不想看到'in FormViewA',你也应该
super():在这种情况下,您必须确保超级程序不包含任何您需要的关键代码。因为当您跳过调用FormViewA.super()时,您也不会调用FormView.super()。FormView继承。如果FormViewA和FormViewB中都有通用代码,则可以将此代码提取到另一个方法。https://stackoverflow.com/questions/35906395
复制相似问题