Python Django-如何创建多对一关系
在我的应用程序中存在多对一关系,例如一名教师可以教授多个科目。所以在管理面板中,我无法模拟它。不能添加多个主题: 这是我的密码: models.py:Python Django-如何创建多对一关系,python,django,Python,Django,在我的应用程序中存在多对一关系,例如一名教师可以教授多个科目。所以在管理面板中,我无法模拟它。不能添加多个主题: 这是我的密码: models.py: class Subject(models.Model): def __str__(self): return self.name name = models.CharField(max_length=200) credit = models.IntegerField() class Teacher(mo
class Subject(models.Model):
def __str__(self):
return self.name
name = models.CharField(max_length=200)
credit = models.IntegerField()
class Teacher(models.Model):
def __str__(self):
return self.name
name = models.CharField(max_length=100)
email = models.CharField(max_length=100, null=True)
chair = models.ForeignKey(Chair, on_delete=models.CASCADE)
academic_degree = models.CharField(max_length=100)
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
你把它倒过来了
ForeignKey
是多对一的,其中多个是定义它的模型的实例;您已经在教师
模型上声明了ForeignKey
到科目
模型,这意味着“许多教师只能教授一门科目”——这应该是另一种方式
因此,在
主题
模型上为教师
模型定义外键
。对其他类似的也要这样做。你得到了相反的结果ForeignKey
是多对一的,其中多个是定义它的模型的实例;您已经在教师
模型上声明了ForeignKey
到科目
模型,这意味着“许多教师只能教授一门科目”——这应该是另一种方式
因此,在
主题
模型上为教师
模型定义外键
。对其他类似的也要这样做。你是在以另一种方式做
您应该将'ForeighKey'
关系置于'Subject'
模型中,而不是'Teacher'
class Subject(models.Model):
def __str__(self):
return self.name
name = models.CharField(max_length=200)
credit = models.IntegerField()
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
这是假设一个科目只有一名教师。老师可以有多个科目。如果同一科目有很多老师,那么你需要使用
ManyToMany()
关系。你是在用另一种方法
subject = models.ManyToManyField(subject)
您应该将'ForeighKey'
关系置于'Subject'
模型中,而不是'Teacher'
class Subject(models.Model):
def __str__(self):
return self.name
name = models.CharField(max_length=200)
credit = models.IntegerField()
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
这是假设一个科目只有一名教师。老师可以有多个科目。如果同一科目有许多教师,那么您需要使用
ManyToMany()
关系。Django非常支持与许多其他属性相关的属性。在您的案例中,一个科目可以由多个教师教授,多个教师可以教授一个科目。为了定义上述关系,您可以利用多个关系(这有助于多个科目与单个教师关联)。如果您需要一对多关系,您可以使用多对一关系
subject = models.ManyToManyField(subject)
Django非常支持与许多其他属性相关的属性。在您的案例中,一个科目可以由多个教师教授,多个教师可以教授一个科目。为了定义上述关系,您可以利用多个关系(这有助于多个科目与单个教师关联)。如果您需要一对多关系,您可以使用多对一关系
subject = models.ManyToManyField(subject)
请更新您的答案,包括一些解释和背景。纯代码的答案被认为是低质量的。@h4z3纯代码的答案不被认为是低质量的,但某些上下文会非常好。@FZs从未说过任何关于“非常”的话;)在低质量队列中得到了此答案,因此是自动筛选第一个认为此答案质量低的人,因此如果答案中有更多内容,我们将不胜感激。@h4z3我想,您已将其标记为“非常低质量”,这就是它进入队列的原因。@h4z3在尝试回答此问题时,您可以单击“确定”(即使它看起来不好,但不应该被删除)…请更新您的答案,以包括一些解释和上下文。纯代码答案被认为是低质量的。@h4z3纯代码答案不被认为是非常低质量的,但一些上下文会非常好。@FZs从未说过任何关于“非常”的内容;)在低质量队列中得到了这个答案,所以,是自动筛选第一次认为它的质量很低,所以答案中的更多内容将受到赞赏。@h4z3我想,你已经将它标记为“非常低质量”,这就是它最终进入队列的原因。@h4z3当它试图回答问题时,你可以单击“外观确定”(即使它看起来不正常,但不应该被删除)。。。