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_validFormViewA 的代码仍然 运行 我看到这个输出:

in FormViewB
in FormViewA

请解释一下,我错过了什么,为什么覆盖方法的代码在这里仍然有效?它是否像在 C++ 中一样被覆盖?非常感谢。

因为你在FormViewB中调用了super(),也就是FormViewAform_valid方法。如果你不想看到 'in FormViewA' 你应该

  1. 根本不要调用 super():在这种情况下,您必须确保 super 不包含您需要的任何关键代码。因为当您跳过调用 FormViewA.super() 时,您也不会调用 FormView.super()

  2. 直接继承自FormView。如果你在FormViewAFormViewB中都有共同的代码,你可以将这段代码提取到另一个方法中。