Использование нескольких Mixins как унаследованных, проблема порядка выполнения методов - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть следующая структура в 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):
     ...............

Если EmailView наследуется Base (как в примере), метод get_context_data из ADTView не вызывается.

Если EmailView не наследуется Base: class Base(AccessMixin, ABC)

, вызывается метод get_context_data из ADTView.

Что входит в метод it,не имеет значения (даже если я получаю контекст, не изменяя и не возвращая его), происходит то же самое.

То, что я хочу, - это выполнение порядка методов:

AccessMixin, EmailView, ADTView, ListView

Полагаюэто происходит потому, что ListView наследуется от View, но в EmailView я использовал View, потому что мне нужно as_view.В основном я звоню EmailView с помощью URL, используя Ajax.

1 Ответ

0 голосов
/ 13 ноября 2018

На самом деле Python MRO использует глубинный подход, и вы можете проверить MRO по этому коду

print(ItemListView.__mro__)
...