簡體   English   中英

Django FormView繼承

[英]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'看到,則應該

  1. 根本不要調用super() :在這種情況下,您必須確保super不包含所需的任何關鍵代碼。 因為當您跳過調用FormViewA.super()您也不會調用FormView.super()

  2. 直接從FormView繼承。 如果FormViewAFormViewB都有通用代碼,則可以將此代碼提取到另一個方法中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM