0

クラスベースの汎用ビューを使用しています。

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

4 に答える 4

0

これは、インスタンス変数ではなくローカル変数を同じ名前で変更しているためです。

于 2012-12-31T06:00:55.287 に答える
0

@phoenixが提案したように、クラスmyViewで、次のようにMyMixinのインスタンスを作成します

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

出力: /test/list?myvar=true

于 2012-12-31T08:05:29.363 に答える
0

私はこれをするだけです。

class MyMixinView(object):

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

class ChildUpdateView(UpdateView, MyMixinView):
    model = MyModel

HTH..

于 2013-01-01T05:29:16.280 に答える
0

Updateview には既に get_success_url がmyMixinあるため、 の前にを配置する必要があります。Updateview

これはうまくいくはずです

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

class MyView(MyMixin, UpdateView):
    model = MyModel
于 2013-01-02T03:02:10.570 に答える