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
?
Один для привязки сотрудника к определенной компании, а другой для назначения доступа к нескольким компаниям?