python - 通过模型时,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'.
解决方案
由于您将其用作through=...
from Subjects
to的模型Classes
,因此您至少需要添加一个ForeignKey
toSubjects
和一个ForeignKey
to 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)
推荐阅读
- php - Wordpress 搜索/创建属性分配然后搜索/添加值
- python - Python:基于多个数据框列的矩阵值
- r - (R):将 data.table 行变成向量
- c# - 如何在列表框中选择随机行,然后通过单击 C# 中的按钮将其保存到文件中?
- javascript - 函数内的函数未执行
- amazon-web-services - CreateStack 操作:模板格式错误:模板的 Resources 块中未解析的资源依赖项 [VpcId]
- javascript - 如何将表格单元格位置计算为数组?
- python - 无法在 Django 中调试或使用 pdb:bdb.BdbQuit
- arrays - 查询从 D 列返回值,但 B 列中不能有两个值写“G”,如何进行?
- javascript - 我如何制作像这个网站 http://ejosue.com 这样的滑动框