首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django FormView继承

Django FormView继承
EN

Stack Overflow用户
提问于 2016-03-10 02:17:06
回答 1查看 214关注 0票数 0

我是python和django的新手,请有人解释一下django/python类视图中的继承机制?这里的例子是:

代码语言:javascript
复制
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在我的模板中创建一个表单,来自FormViewAform_valid代码仍然运行,并且我看到这个输出:

代码语言:javascript
复制
in FormViewB
in FormViewA

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-10 02:41:52

因为您正在FormViewB中调用FormViewB,这意味着FormViewAform_valid方法。如果你不想看到'in FormViewA',你也应该

  1. 根本不要调用super():在这种情况下,您必须确保超级程序不包含任何您需要的关键代码。因为当您跳过调用FormViewA.super()时,您也不会调用FormView.super()
  2. 直接从FormView继承。如果FormViewAFormViewB中都有通用代码,则可以将此代码提取到另一个方法。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35906395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档