如何在django Generic视图中覆盖父类中的方法

时间:2012-12-31 05:20:57

标签: python 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未被覆盖

4 个答案:

答案 0 :(得分:0)

这是因为您没有修改实例变量,而是修改同名的局部变量。

答案 1 :(得分:0)

像@phoenix建议的那样,在你的类myView中,按如下所示创建一个MyMixin实例

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

输出: /测试/列表?MYVAR =真

答案 2 :(得分:0)

我会这样做。

class MyMixinView(object):

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

class ChildUpdateView(UpdateView, MyMixinView):
    model = MyModel

HTH ..

答案 3 :(得分:0)

您必须将myMixin放在Updateview之前,因为Updateview已经有get_success_url。

这应该有效

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

class MyView(MyMixin, UpdateView):
    model = MyModel