From 36c5323e0e787f8d6eafc6306a5dac13224f5b88 Mon Sep 17 00:00:00 2001 From: lizerk Date: Fri, 20 Mar 2026 00:22:39 +0300 Subject: [PATCH] Fix employeeNumber update: use direct LDAP modify instead of ORM save - Replaced ORM .save() with direct ldap3.Connection.modify() - ORM save() tries to rebuild DN which fails without proper cn attribute - Direct modify only changes the employeeNumber attribute - Fixes Exception: Could not build Distinguished Name --- backend/employees/ldap/services/user_service.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/backend/employees/ldap/services/user_service.py b/backend/employees/ldap/services/user_service.py index 143c6e1c..005b617c 100644 --- a/backend/employees/ldap/services/user_service.py +++ b/backend/employees/ldap/services/user_service.py @@ -143,13 +143,15 @@ class UserService(BaseService): emp._skip_ldap_sync = True emp.save(update_fields=["password"]) - # Запись employeeNumber в LDAP для связки - ldap_user = LdapUser.objects.get(dn=dn) + # Запись employeeNumber в LDAP для связки через прямую модификацию + # Используем ldap3 напрямую, т.к. ORM .save() пытается перестроить DN + from ldap3 import MODIFY_REPLACE + conn.modify( + dn, + {'employeeNumber': [(MODIFY_REPLACE, [str(emp.pk)])]} + ) guid = None - ldap_user.employee_number = str(emp.pk) - ldap_user.save() - self._touch_state( model="employee", object_pk=emp.pk,