簡體   English   中英

如何在 django 的子 class 中使用父 class 的不同裝飾器?

[英]how to use different decorator from parent class in child class in django?

我有 2 個基於 class 的視圖MyFirstViewMySecondView 我希望這 2 個視圖使用彼此不同的裝飾器。 我已經在谷歌上搜索了將近一個小時的解決方案,但仍然找不到任何答案。 所以我在這里尋求幫助。

@method_decorator(my_first_decorator, name="dispatch")
class MyFirstView(UpdateView):
    # some attributes
    # some methods


@method_decorator(my_second_decorator, name="dispatch")
class MySecondView(MyFirstView):
    # some attributes

我一直在嘗試為上面顯示的視圖提供不同的裝飾器,但由於某種原因MySecondView仍在使用MyFirstView的裝飾器。

我也試圖覆蓋 dispatch 方法但沒有成功。

class MyFirstView(UpdateView):

    @method_decorator(my_first_decorator)
    def dispatch(self, *args, **kwargs):
        return super().dispatch(*args, **kwargs)

    # some attributes
    # some methods


class MySecondView(MyFirstView):

    @method_decorator(my_second_decorator)
    def dispatch(self, *args, **kwargs):
        return super().dispatch(*args, **kwargs)

    # some attributes

第二種方法似乎是正確的,但是您必須在 MRO 中跳過一個父級:

class MySecondView(MyFirstView):

    @method_decorator(my_second_decorator)
    def dispatch(self, *args, **kwargs):
        return super(MyFirstView, self).dispatch(*args, **kwargs)

這樣, super調用普通的未修飾的原始實現,而不是來自其直接 super class 的受污染的實現。

暫無
暫無

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

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