Django не обнаруживает внешний ключ в ManyToManyField при передаче через модель

#python #django

#python #django

Вопрос:

Я пытаюсь построить связь между моделью предмета и моделью учителя и моделью классов. Вот как я это связываю-

Предмет может преподаваться во многих классах, и в классе может быть много предметов. Предмет в классе может преподавать только один учитель.

Итак, в основном я пытаюсь сделать следующее: есть предмет, скажем, математика, предмет можно преподавать во многих классах, скажем, с 1 по 10 класс, и в разных классах будут преподавать разные учителя.

Вот моя предметная модель:

 class Subjects(models.Model):
    subject_id = models.CharField(unique=True, max_length=20)
    classes = models.ManyToManyField(Classes, through='ThroughTeacher')
  

Модель сквозного учителя:

 class ThroughTeacher(models.Model):
    class_id = models.ForeignKey(Classes, null=True, on_delete=models.SET_NULL)
    teacher = models.ForeignKey(Teacher, null=True, on_delete=models.SET_NULL)
  

Классы моделируют:

 class Classes(models.Model):
    class_id = models.CharField(unique=True, max_length=30)
    teacher = models.ManyToManyField(Teacher)
  

Модель учителя:

 class Teacher(models.Model):
    name = models.CharField(max_length=30)
    contact = models.CharField(max_length=10)
  

Это ошибка, которую я получаю:

 subjects.ThroughTeacher: (fields.E336) The model is used as an intermediate model by 
'subjects.Subjects.classes', but it does not have a foreign key to 'Subjects' or 'Classes'.
  

Комментарии:

1. Поскольку вы используете его как through=... модель from Subjects to Classes , вам нужно добавить как минимум a ForeignKey to Subjects и a ForeignKey to Classes .

Ответ №1:

Поскольку вы используете его как through=... модель from Subjects to Classes , вам нужно добавить как минимум a ForeignKey to Subjects и a ForeignKey to Classes .

Таким образом, вы моделируете ThroughTeacherModel как:

 class ThroughTeacher(models.Model):
    class_ = models.ForeignKey(Classes, null=True, on_delete=models.SET_NULL)
    teacher = models.ForeignKey(Teacher, null=True, on_delete=models.SET_NULL)
    subject = models.ForeignKey(Subjects, null=True, on_delete=models.SET_NULL)