链接django中的许多字段
我的模型定义如下:链接django中的许多字段,django,django-models,many-to-many,Django,Django Models,Many To Many,我的模型定义如下: class Subject(models.Model): subject_id = models.IntegerField(primary_key=True) subject_name = models.CharField(max_length=20) class Teacher(models.Model): teacher_id = models.CharField(max_length=10, primary_key=True) teac
class Subject(models.Model):
subject_id = models.IntegerField(primary_key=True)
subject_name = models.CharField(max_length=20)
class Teacher(models.Model):
teacher_id = models.CharField(max_length=10, primary_key=True)
teacher_name = models.CharField(max_length=30)
teacher_age = models.IntegerField()
teacher_doj = models.DateField()
subjects = models.ManyToManyField(Subject)
class TeacherScores(models.Model):
co_id = models.CharField(primary_key = True, max_length=5)
internal_score = models.IntegerField()
external_score = models.IntegerField()
teacher = models.ManyToManyField(Teacher)
下面显示了几个数据库条目
老师
+------------+--------------+-------------+-------------+
| teacher_id | teacher_name | teacher_age | teacher_doj |
+------------+--------------+-------------+-------------+
| AC23001 | Tina | 32 | 2017-04-10 |
| AC23002 | Rina | 31 | 2009-04-10 |
| AC23003 | Tom | 35 | 2009-04-10 |
| AC23004 | Henry | 56 | 2009-04-10 |
+------------+--------------+-------------+-------------+
主题
+------------+--------------+
| subject_id | subject_name |
+------------+--------------+
| 1 | English |
| 2 | Hindi |
| 3 | Sanskrit |
| 4 | Math |
| 5 | Physics |
| 6 | Chemistry |
| 7 | Biology |
| 8 | History |
| 9 | Civics |
| 10 | Geography |
| 11 | MoralScience |
| 12 | Algebra |
+------------+--------------+
教师科目
+----+------------+------------+
| id | teacher_id | subject_id |
+----+------------+------------+
| 4 | AC23002 | 4 |
| 5 | AC23002 | 8 |
| 2 | AC23002 | 12 |
| 6 | AC23003 | 5 |
| 7 | AC23003 | 9 |
| 10 | AC23004 | 5 |
| 8 | AC23005 | 9 |
| 9 | AC23005 | 10 |
| 11 | AC23006 | 12 |
| 12 | AC23007 | 6 |
| 13 | AC23008 | 6 |
+----+------------+------------+
基本上,我想为某位教师处理的每门学科的教师分数模型添加条目。
在这里,我想修改TeacherScores模型,这样我就可以包含每个科目的教师分数。
我尝试通过teacherscores对象插入主题,但出现了错误
>>> t1 = TeacherScores('C006','23','24',teacher__subject='Math')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.5-py2.7.egg/django/db/models/base.py", line 572, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])
TypeError: 'teacher__subject' is an invalid keyword argument for this function
>>> t1 = TeacherScores('C006','23','24',teacher__subjects='Math')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/Django-1.11.5-py2.7.egg/django/db/models/base.py", line 572, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])
TypeError: 'teacher__subjects' is an invalid keyword argument for this function
>>t1=教师分数('C006'、'23'、'24',教师科目=数学')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.7/dist packages/Django-1.11.5-py2.7.egg/Django/db/models/base.py”,第572行,在__
raise TypeError(“%s”是此函数“%list(kwargs)[0]的无效关键字参数)
TypeError:“教师主题”是此函数的无效关键字参数
>>>t1=教师分数('C006'、'23'、'24',教师科目=数学')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.7/dist packages/Django-1.11.5-py2.7.egg/Django/db/models/base.py”,第572行,在__
raise TypeError(“%s”是此函数“%list(kwargs)[0]的无效关键字参数)
TypeError:“教师科目”是此函数的无效关键字参数
如何更改我的模型-教师分数以包含教师的科目字段,前提是在教师和科目之间定义了许多字段,同样,对于TeacherScores和Teacher您想要做的是创建明确的
TeacherSubject
类,用于建模教师
和主题
之间的M2M关系。然后,您可以在TeacherScores
中引用它
1.M2M型教师
-主题
关系使用至
选项:
然后修改Teacher
和TeacherScores
以使用TeacherSubject
:
# Teacher:
subjects = models.ManyToManyField(Subject, through=TeacherSubject)
# TeacherScores:
teachersubject = models.ForeignKey(TeacherSubject)
2.明确引用教师主题:
详细信息已说明。谢谢。我将修改我的模型以包括TeacherSubject模型。除了主题之外,我还想通过TeacherScores模型访问教师属性。因此,
teacher=models.ManyToManyField(teacher)
也是必需的吗?或者应该将其定义为外键。不,如果您通过teachersubject.Teacher引用TeacherScore中的教师,例如:Teacher=TeacherScore.teachersubject.Teacher,这会更好(根据SSoT()),因为teachersubject始终保留对教师的引用。
# Teacher:
subjects = models.ManyToManyField(Subject, through=TeacherSubject)
# TeacherScores:
teachersubject = models.ForeignKey(TeacherSubject)
t1 = TeacherScores('C006','23','24', teachersubject=some_teachersubject_instance)