使用多个Mixins作为继承方法执行顺序的问题

时间:2018-11-13 08:10:58

标签: django django-views

我在Django中具有以下结构:

class EmailView(View, ABC):

    def post(self, request):
           pass

        def get_context_data(self, *args, **kwargs):
         context = super().get_context_data(*args, **kwargs)
           .........


class Base(AccessMixin,  EmailView, ABC):
      .....


class ADTView(ABC):
    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        .......

class BaseMixin(Base, SubscribeNewsletterView, ADTView, ABC):
    def get_context_data(self, *args, **kwargs):
           ..............


class ItemListView(BaseMixin, ListView):
     ...............

如果EmailViewBase继承(例如),则不会调用get_context_data中的方法ADTView

如果EmailView没有被Base继承:class Base(AccessMixin, ABC)

调用了get_context_data中的方法ADTView

方法中的内容无关紧要(即使我获得了上下文,也没有修改并返回它),

我想要的是方法订单的执行:

AccessMixin, EmailView, ADTView, ListView

我想是因为ListView是从View继承而来的,但是在EmailView中我使用了View,因为我需要as_view。基本上,我是使用Ajax通过URL调用EmailView

1 个答案:

答案 0 :(得分:0)

实际上,Python MRO使用深度优先方法,您可以通过以下代码检查MRO

print(ItemListView.__mro__)