Попробуйте использовать поля «многие ко многим» для отношений между школами и специальностями.Я бы добавил это в школу, так как лично я думаю об этом как о том, что «в школах много специальностей» чаще, чем «во многих школах преподают», но и то и другое будет хорошо.
Кроме того, установите для текстовых полей значениебыть чем-то вроде name
, так как это то, что представляет текстовое поле: не школа / майор, а название школы / майор.Кроме того, ваша логика выглядит хорошо
from django.db import models
class Major(models.Model):
name = models.CharField(max_length=30, db_index=True)
class School(models.Model):
name = models.Charfield(max_length=50, db_index=True)
majors = models.ManyToManyField(Major)
class Professor(models.Model):
school = models.ForeignKey(School , on_delete=models.CASCADE)
major = models.ForeignKey(Major , on_delete=models.CASCADE)
Как только вы получите это, вы можете взять основные объекты и добавить их в школы
major = Major.objects.get(name='Physics')
school = School.objects.get(name='Harvard')
school.majors.add(major)
... или захватить школы идобавьте их к специальностям с помощью обратного просмотра (атрибут _set):
school = School.objects.get(name='Harvard')
major = Major.objects.get(name='Physics')
major.school_set.add(school)
Профессоры будут созданы без связей ManyToMany
school = School.objects.get(name='Harvard')
major = Major.objects.get(name='Physics')
Professor.objects.create(school=school, major=major)
Ссылка на документацию по ManyToManyField: https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_many/