Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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
链接django中的许多字段_Django_Django Models_Many To Many - Fatal编程技术网

链接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)