使用第三种模型:
class ProjectRole(models.Model):
rolename = models.CharField(max_length=10)
class Project(models.Model):
projname = models.CharField(max_length=10)
class Employee(models.Model):
empname = models.CharField(max_length=10)
class Employment(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
role = models.ForeignKey(ProjectRole, on_delete=models.CASCADE)
因此,第三个模型将包含的三元组
employee
,
project
和
role
.
如果你想轻松获得
Employee
s代表
Project
,通过查看
Employement
模型,我们可以跨越
ManyToManyField
是通过的吗
Employment
型号:
class ProjectRole(models.Model):
rolename = models.CharField(max_length=10)
class Project(models.Model):
projname = models.CharField(max_length=10)
employees = models.ManyToManyField(
'Employee', through='Employment', related_name='projects'
)
roles = models.ManyToManyField(
ProjectRoles, through='Employment', related_name='projects'
)
class Employee(models.Model):
empname = models.CharField(max_length=10)
roles = models.ManyToManyField(
ProjectRole, through='Employment', related_name='employees'
)
class Employment(models.Model):
employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
role = models.ForeignKey(ProjectRole, on_delete=models.CASCADE)
但如果你需要完整的细节,你可以使用
my_project.employment_set.all()
以获得
工作
因此还包含有关的详细信息的记录
.role
为此
.employee
.