2012-12-31 79 views
0

我正在使用基於類的通用視圖。如何覆蓋父類中的方法在Django通用視圖

class MyView(UpdateView): 
    model = MyModel 
    success_url = "/test/list" 

現在這工作正常。

但我想讓父類,這樣我所有的觀點從它繼承並定義success_url有這樣

class MyMixin(object): 
    def __init__(self, *args, **kwargs): 
     self.success_url ="/test/list?myvar=true" 

然後

class MyView(UpdateView, MyMixin): 
    model = MyModel 
    success_url = "/test/list" 

但我success_url不被覆蓋

+0

這是因爲'success_url'不是一個實例變量,但它也可能與你的縮進做。請先修正縮進。 –

+0

這只是錯字。但是我怎樣才能完成我的任務 – user19140477031

回答

0

這是因爲你沒有修改實例變量,而是通過相同的名稱修改局部變量。

+0

那麼我該如何解決這個問題 – user19140477031

+0

你可以通過MyMixin實例來實現,比如:mymixin_inst.success_url ='/ some/url /' –

+0

你可以用更多的例子來寫一些。我不明白 – user19140477031

0

像@phoenix建議,在你的類MyView的,按如下方式創建MyMixin的實例

class myview(updateview,MyMixin): 
    myVar=MyMixin("a") #just an e.g 
    print myVar.success_url 

輸出: /測試/列表MYVAR =真

0

我只想做到這一點。

class MyMixinView(object): 

    def get_success_url(self): 
     return "/test/list" 

class ChildUpdateView(UpdateView, MyMixinView): 
    model = MyModel 

HTH ..

+0

我試過它也沒有工作。它說沒有url重定向。系統無法從中獲取網址 – user19140477031

0

你必須把myMixinUpdateview因爲之前的UpdateView已經有get_success_url。

這應該工作

class MyMixin(object): 
    def get_success_url(self): 
     return "/test/list" 

class MyView(MyMixin, UpdateView): 
    model = MyModel