[英]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.