Использовать 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
У каждого ученика будет несколько объектов ... в то время как несколько предметов могут быть у моих учеников
Obs .: Обычно я хотел бы назвать мои отношения 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/ Примеры / many_to_many /
EDIT Вы можете сделать это тоже без использования ManyToMany, если вам нужно какое-либо новое поле в Attendance
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 доступ к сырым многим во многие созданные поля таблицы