При создании различных смесей в django невозможно переназначить разные функции на одну и ту же функцию

У меня есть класс для удаления пользователя. Есть три миксина (проверки).

  1. За аутентификацию
  2. За то, что пользователь не удаляет других пользователей
  3. Что пользователь не используется

Проверки реализуются через миксины

class UserDeleteView(CustomLoginRequiredMixin, CustomUserPassesTestMixin,
CheckedForUseMixin2,
SuccessMessageMixin,
DeleteView):
template_name = 'users/delete.html'
success_url = '/users/'
model = get_user_model()
success_message = \_('User deleted successfully')
class CustomLoginRequiredMixin(LoginRequiredMixin):
login_url = '/login/'
redirect_field_name = 'next'

    def handle_no_permission(self):
        messages.error(self.request,
                       _("You are not authorized! Please sign in."))
        return super().handle_no_permission()

class CustomUserPassesTestMixin():
    def test_func(self):
        return self.get_object() == self.request.user

    def dispatch(self, request, *args, **kwargs):
        if not self.test_func():
            messages.error(self.request,
                           _("You do not have permission to change another "
                             "user"))
            return redirect('list_users')
        return super().dispatch(request, *args, **kwargs)
class CheckedForUseMixin2():

    def test_func(self):
        user = self.get_object()
        return not (user.tasks_author.exists() or user.tasks_executor.exists())

    def dispatch(self, request, *args, **kwargs):
        if not self.test_func():
            messages.error(self.request,
                           _("Can't delete user because it's in use"))
            return redirect('list_users')
        return super().dispatch(request)

второй раз переназначение test_func нарушает логику теста.

То есть test_func по какой-то причине всегда начинает возвращать true или false, независимо от того, есть ли у пользователя задачи.

Если я удалю test_func, и перенесу проверку в блок if, или вызову функцию, например, test_func1, то все работает.

https://github.com/zhek111/python-project-52

Я пробовал наследоваться от различных классов (View, Delete View, UserPassesTestMixin и другие). Пробовал и проверял условия.

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