Я просто искал документацию, чтобы можно было изменить промежуточную таблицу, но когда я ее реализую, у меня возникают проблемы:
https://docs.djangoproject.com/en/2.0/topics/db/models/#extra-fields-on-many-to-many-relationships
Я разрабатываю приложение, в котором студентымогут оценивать своих учителей, мои модели:
class Item(models.Model):
name = models.TextField()
def __str__(self):
return self.name
class Category(models.Model):
name = models.CharField(max_length=50,null=True)
items = models.ManyToManyField(Item, related_name='categories')
def __str__(self):
return self.name
class Professor(models.Model):
name = models.CharField(max_length=50,null=True)
categories = models.ManyToManyField(Category, related_name='professors')
def __str__(self):
return self.name
class Student(models.Model):
name = models.CharField(max_length=50,null=True)
professors = models.ManyToManyField(Professor, related_name='students')
def __str__(self):
return self.name
Каждый студент имеет профессора (ов), эти профессора, в свою очередь, имеют связанные категории вопросов, а каждая категория вопросов имеет связанные вопросы.
Я хочу изменить промежуточную таблицу student_professor
, чтобы добавить поле, в котором, когда ученик оценивает учителя, это записывается в базу данных.Я попробовал это с:
class Professor(models.Model):
name = models.CharField(max_length=50,null=True)
categories = models.ManyToManyField(Category, related_name='professors')
def __str__(self):
return self.name
class Student(models.Model):
name = models.CharField(max_length=50,null=True)
professors = models.ManyToManyField(Professor, related_name='students',through='Studentprofesor' )
def __str__(self):
return self.name
class Studentprofesor(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
professor = models.ForeignKey(Professor, on_delete=models.CASCADE)
tested = models.BooleanField(default=False)
Миграция работает без проблем, и в базе данных я получаю промежуточную таблицу student_professor
с полями, которые я назначил в модели (поле tested
).
Но когда я вхожу в панель администрирования и создаю учащегося, у меня нет возможности назначить учителя учащемуся (если я запускаю код, который у меня есть в первом блоке, то есть без изменения промежуточноготаблица, если я могу назначить его).
Почему это происходит и как это можно исправить?