自动填充Django模型

时间:2018-07-13 18:24:25

标签: django django-models

我的模型包含3个类。

{{1}}

现在,我想为每个学生的每个学科创建一个出勤表。因此,我不想再次为每个学科和学生填写学科和学生的详细信息。请告诉我这样做的最佳方法,以便在管理面板上我只想将每个学科和一个学生添加一次。

可能有多个学生学习一个学科,一个学生可能还会有多个学科。

(您可能会告诉我另一种方法,而不是继承Student和Subject)。

1 个答案:

答案 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