Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-如何创建多对一关系_Python_Django - Fatal编程技术网

Python Django-如何创建多对一关系

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

在我的应用程序中存在多对一关系,例如一名教师可以教授多个科目。所以在管理面板中,我无法模拟它。不能添加多个主题:

这是我的密码:

models.py:

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当它试图回答问题时,你可以单击“外观确定”(即使它看起来不正常,但不应该被删除)。。。