При создании различных смесей в django невозможно переназначить разные функции на одну и ту же функцию
У меня есть класс для удаления пользователя. Есть три миксина (проверки).
- За аутентификацию
- За то, что пользователь не удаляет других пользователей
- Что пользователь не используется
Проверки реализуются через миксины
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 и другие). Пробовал и проверял условия.