Как сделать поле уникальным для двух моделей в 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?

Вернуться на верх