Переопределение метода 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)