首页 > 解决方案 > 通过模型时,Django 未检测到 ManyToManyField 中的外键

问题描述

我正在尝试在 Subject 模型与 Teacher 模型和 Classes 模型之间建立关系。这就是我的联系方式-

一个科目可以在许多班级中教授,一个班级可以有许多科目。课堂上的一门学科只能由一名教师教授。

所以基本上我想做的是这个——有一门科目,比如数学,这个科目可以在很多班级教授,比如第 1 班到第 10 班,并且会有不同的老师在不同的班级教授。

这是我的主题模型:

class Subjects(models.Model):
    subject_id = models.CharField(unique=True, max_length=20)
    classes = models.ManyToManyField(Classes, through='ThroughTeacher')

通过教师模型:

class ThroughTeacher(models.Model):
    class_id = models.ForeignKey(Classes, null=True, on_delete=models.SET_NULL)
    teacher = models.ForeignKey(Teacher, null=True, on_delete=models.SET_NULL)

类模型:

class Classes(models.Model):
    class_id = models.CharField(unique=True, max_length=30)
    teacher = models.ManyToManyField(Teacher)

教师模型:

class Teacher(models.Model):
    name = models.CharField(max_length=30)
    contact = models.CharField(max_length=10)

这是我得到的错误:

subjects.ThroughTeacher: (fields.E336) The model is used as an intermediate model by 
'subjects.Subjects.classes', but it does not have a foreign key to 'Subjects' or 'Classes'.

标签: pythondjango

解决方案


由于您将其用作through=...from Subjectsto的模型Classes,因此您至少需要添加一个ForeignKeytoSubjects和一个ForeignKeyto Classes

因此,您将模型建模ThroughTeacherModel为:

class ThroughTeacher(models.Model):
    class_ = models.ForeignKey(Classes, null=True, on_delete=models.SET_NULL)
    teacher = models.ForeignKey(Teacher, null=True, on_delete=models.SET_NULL)
    subject = models.ForeignKey(Subjects, null=True, on_delete=models.SET_NULL)

推荐阅读