ForeigKey и ManytoMany Key в одной модели в django

Это скорее логический вопрос, чем вопрос кодирования

Я создаю приложение, в котором администратор компании может зарегистрироваться (компания может быть трех типов ИЛИ комбинация трех вариантов, т.е. pool, consignor и consignee). Теперь этот администратор может создавать Employee аккаунты и давать им дальнейшие роли в соответствии с работой.

Теперь эта модель сотрудника будет связана с компанией, но в зависимости от региона будет иметь доступ только к ограниченному consignor или consignee

Я создал модели для приведенного выше утверждения следующим образом:

class CompanyTypes(models.Model):

    company_choices = (('Pool Operator', 'Pool Operator'), ('Consignor', 'Consignor'), ('Consignee', 'Consignee'))
    company_type = models.CharField(max_length=500, default='Pool Operator', choices=company_choices)


class Company(models.Model):
    type = models.ManyToManyField(CompanyTypes)
    name = models.CharField(max_length=500, default=0)
    email = models.EmailField(max_length=50, default=0)
    phone = models.CharField(max_length=50, default=0)
    gstin = models.CharField(max_length=50, default=0)
    address = models.CharField(max_length=500, default=0)


class User(AbstractUser):
    is_admin = models.BooleanField(default=False)
    company = models.ForeignKey(Company, on_delete=models.CASCADE, blank=True, null=True)

    @property
    def full_name(self):
        return self.first_name + " " + self.last_name


class GroupModels(models.Model):

    module_choices = (('HR', 'HR'), ('Tech', 'Tech'), ('Marketing', 'Marketing'))
    module = models.CharField(max_length=500, choices=module_choices)


class Group(models.Model):

    name = models.CharField(max_length=500, default=0)
    modules = models.ManyToManyField(GroupModels)


class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    name = models.CharField(max_length=500, default=0)
    email = models.EmailField(max_length=500, default=0)
    role = models.CharField(max_length=100, default='View')   #View/CRUD
    groups = models.ManyToManyField(Group)
    accesible_companies = models.ManyToManyField(Company)

Мой вопрос заключается в том, могу ли я использовать оба ключа Foreign и ManytoMany в одной модели, как я это сделал в модели Employee? Один для привязки сотрудника к определенной компании, а другой для назначения доступа к нескольким компаниям?

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