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)
последний будет не запускать сигналы, присоединенные к пользовательской модели.