# accounts/signals.py from django.db.models.signals import post_save from django.dispatch import receiver from django.db import transaction from django.utils.text import slugify from hr.models import Employee from .models import User @receiver(post_save, sender=User, dispatch_uid="create_employee_on_user_create_simple") def create_employee_on_user_create(sender, instance: User, created: bool, **kwargs): if not created: return def _make(): tenant = getattr(instance, "tenant", None) email = (instance.email or "").strip() # If already linked OR same email exists in this tenant, skip if Employee.objects.filter(user=instance).exists(): return if email and Employee.objects.filter(tenant=tenant, email__iexact=email).exists(): return Employee.objects.create( tenant=tenant, user=instance, first_name=instance.first_name or "", last_name=instance.last_name or "", email=email, # employee_id will be auto-generated in Employee.save() ) transaction.on_commit(_make)