Существует ли какой-либо порядок наследования PermissionRequiredMixin в Django?

Я столкнулся с этой проблемой, следуя учебнику Django 8.

Я могу перенаправить на страницу входа в систему, когда ставлю PermissionRequiredMixin класс первым:

class AuthorCreate(PermissionRequiredMixin, CreateView):
    model = Author
    fields = '__all__'
    initial = {'date_of_death': '05/01/2018', }
    permission_required = 'catalog.add_author'

result of First

Но когда я ставлю его на вторую позицию, он не работает и переходит на страницу, где разрешение не позволяет это сделать:

class AuthorCreate(CreateView, PermissionRequiredMixin):

result of Second

Я хочу знать, должен ли я всегда помещать класс PermissionRequiredMixin на первую позицию. А как насчет LoginRequiredMixin? Или

что если я унаследую оба класса?

Да, и это документировано для LoginRequiredMixin миксина:

Этот миксин должен находиться на самой левой позиции в списке наследования.

Для PermissionRequiredMixin это не указано в явном виде, но работает так же.

Вам не нужно наследоваться от обоих, поскольку пользователь не может иметь требуемых прав, не войдя в систему, поэтому PermissionRequiredMixin должно быть достаточно. Если вы действительно хотите иметь оба, LoginRequiredMixin должен быть самым левым.

Вернуться на верх