Переопределение метода create() в менеджере моделей ничего не дает

У меня есть модель сотрудника, и при создании экземпляра я хочу автоматически установить его email в "<first_name>.<last_name>@company.com". Итак, я написал менеджер для выполнения предварительной обработки:

class EmployeeManager(models.Manager):
    def create(self, **kwargs):
        name = kwargs['first_name']
        surname = kwargs['last_name']
        kwargs['email'] = f'{name}.{surname}@company.com'
        return super(EmployeeManager, self).create(**kwargs)

class Employee(models.Model):
    first_name = models.CharField(null=False, blank=False, default="employee", max_length=255)
    last_name = models.CharField(null=False, blank=False, default="employee", max_length=255)
    position = models.CharField(null=False, blank=False, default="SDE", max_length=255)
    email = models.EmailField(null=False, default="employee@company.com", unique=True)
    phone = models.CharField(null=False, blank=False, default='1234567890', max_length=10, validators=[MinLengthValidator])
    slack_id = models.UUIDField(null=False, blank=True, default = uuid.uuid4)
    active = models.BooleanField(default=True)

    objects = EmployeeManager()

    def __str__(self) -> str:
        return self.email

Однако, когда я создаю экземпляр этой модели с помощью админ-фазы, email устанавливается в значение default (employee@company.com), а не в то, которое я передаю ему в методе new create(). Почему это происходит?

Предлагаю использовать метод Save на вашей модели

def save(self, *args, **kwargs):
     self.email = f'{self.first_name}.{self.last_name}@company.com'
     super(Employee, self).save(*args, **kwargs)
Вернуться на верх