Как сделать поле уникальным для двух моделей в Django без наследования?
У меня есть следующие 2 модели, Admin и Employee:
class Admin(models.Model):
name = models.CharField(max_length=30)
email = models.EmailField()
city = models.CharField(max_length=30)
def __str__(self):
return str(self.name)
class Employee(models.Model):
name = models.CharField(max_length=30)
email = models.EmailField()
city = models.CharField(max_length=30)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
def __str__(self):
return str(self.name)
Я хочу, чтобы поле email
было уникальным в обеих моделях, т.е. никакие два администратора не могут иметь одинаковое email
и никакие два сотрудника не могут иметь одинаковое email
и никакие администратор и сотрудник не имеют одинаковое email
.
Я создал базовый класс CustomUser
и унаследовал его для обоих классов Employee
и Admin
:
class CustomUser(AbstractUser):
email = models.EmailField(unique=True)
class Employee(models.Model):
name = models.CharField(max_lengt=30)
email = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
city = models.CharField(max_length=30)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
def __str__(self):
return str(self.name)
class Admin(models.Model):
name = models.CharField(max_lengt=30)
email = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
city = models.CharField(max_length=30)
def __str__(self):
return str(self.name)
Я хотел бы узнать, есть ли другой способ обеспечить такую кросс-модельную уникальность, который не потребует от меня создания отдельного класса Abstract?