我的模型包含3个类。
{{1}}
现在,我想为每个学生的每个学科创建一个出勤表。因此,我不想再次为每个学科和学生填写学科和学生的详细信息。请告诉我这样做的最佳方法,以便在管理面板上我只想将每个学科和一个学生添加一次。
可能有多个学生学习一个学科,一个学生可能还会有多个学科。
(您可能会告诉我另一种方法,而不是继承Student和Subject)。
答案 0 :(得分:0)
使用ManyToManyField
class Student(models.Model):
name = models.CharField(...)
attendance = models.ManyToMany(Subject)
class Subject(models.Model):
subject = models.CharField(...)
就是这样
id | student_id | subjects_id
-----------------------------------------
1 | 1 | 10
2 | 4 | 11
3 | 4 | 19
4 | 5 | 10
...
~1000
每个学生都有多个主题...而我的学生可以选多个主题
不好意思:通常我想将我的ManyToMany关系称为复数形式的第二张桌子的名字...所以主题
用法:
all_students = Student.objects.all()
all_subjects = Subject.objects.all()
all_subjects_from_student = Student.objects.get(id=1).attendance.all()
我如何标记特定学生的出勤率? 特定主题?
particular_student = Student.objects.get(id=1) # When 1 is the student ID
particular_subject_of_student = particular_student.filter(id=1) # When 1 is the subject ID
https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_many/
编辑,如果您需要在出勤时添加任何新字段,也可以不使用ManyToMany进行操作
class Student(models.Model):
name = models.CharField(...)
class Subject(models.Model):
subject = models.CharField(...)
class Attendance(Student, Subject):
att = models.IntegerField()
subject = models.ForeignKey(Subject)
student = models.ForeignKey(Student)
... # You can add more fields if you like
这里有一个像您一样的问题:django accessing raw many to many created table fields