Не существует такого понятия, как «поле« многие ко многим »» для таблицы базы данных, о которой вы, возможно, знаете из внешних ключей.В представлении базы данных отношения «многие ко многим» реализуются с помощью дополнительной таблицы, которая связывает первичные ключи (обычно идентификаторы) записей, которые вы хотите установить в отношении.В вашем случае это таблица студентов-предметов.Django использует эту таблицу, когда вы определяете отношение «многие ко многим» в модели.Вам вообще не нужно менять структуру вашей базы данных, она будет отлично работать, как сейчас.
См. Документацию: ManyToManyField
Вам придетсяустановите опцию db_table с именем вашей таблицы-посредника (т.е. студентов-предметов).Тогда все должно работать нормально.
РЕДАКТИРОВАТЬ:
Учитывая ваш комментарий, проблема в том, что Django ожидает определенное соглашение об именах (например, MODELNAME_id), которое не предусмотрено вашей таблицей.Поскольку вы говорите, что не можете изменить саму таблицу, вам нужно попробовать что-то еще.
Вы должны создать дополнительную модель для своей таблицы-посредника (студенты-предметы) и определить поле «студенты» как внешний ключ кмодель студентов и поле «предметы» как внешний ключ к модели предметов.Затем для поля «многие ко многим» вы указываете опцию «через» с именем вашей промежуточной таблицы.Установите параметры db_column, чтобы Django знал, какие имена вы хотите использовать для столбцов базы данных.'db_table' в мета-классе необходим для указания имени таблицы базы данных.
Вы получите что-то вроде:
class StudentsSubjects(models.Model):
student = models.ForeignKey(Student, db_column='student')
subject = models.ForeignKey(Subject, db_column='subject')
class Meta:
db_table = 'students-subjects'
class Student(models.Model):
...
subjects = models.ManyToManyField(Subject, through='StudentsSubjects')
...
class Subject(models.Model):
...
Надеюсь, это поможет вам.
Подробнее см.: Дополнительные поля в отношении многие ко многим .