Django устанавливает значение false для пользователя is_active при создании увольнения сотрудника

У меня есть расширенная модель User, которая связана с моделью Separation сотрудника, и я хотел бы установить этого пользователя как неактивного с помощью SeparationCreateView. Это похоже на то, что когда сотрудник покидает компанию, это регистрируется с помощью этого представления разделения и автоматически отключает доступ сотрудника к приложению.

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)

class Separation(models.Model):
    employee = models.ForeignKey(Employee, on_delete=models.CASCADE)

Представление создания разделения работает, но оно не устанавливает для пользователя is_active значение false

class SeparationCreateView(LoginRequiredMixin, CreateView):
    model = Separation
    form_class = SeparationForm
    template_name = 'coreHR/separation.html'
    success_url = reverse_lazy('corehr:separations')

    def form_valid(self, form):
        separation = form.save(commit=False)
        separation.employee.user.is_active = False
        separation.save()
        return super().form_valid(form)

Что я делаю неправильно? Любая помощь будет высоко оценена.

Вам необходимо сохранить соответствующего сотрудника, поэтому:

class SeparationCreateView(LoginRequiredMixin, CreateView):
    # ⋮

    def form_valid(self, form):
        user = form.save().employee.user
        user.is_active = False
        user.save()
        return super().form_valid(form)

мы можем сделать это немного более эффективным с помощью:

from django.contrib.auth import get_user_model

class SeparationCreateView(LoginRequiredMixin, CreateView):
    # ⋮

    def form_valid(self, form):
        separation = form.save()
        User = get_user_model()
        User.objects.filter(
             employee__separation=separation
        ).update(is_active=False)
        return super().form_valid(form)

последний будет не запускать сигналы, присоединенные к пользовательской модели.

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