Django многие ко многим с двумя моделями?
У меня есть две модели Students, University
. Используя ее, студент может подать заявку на курс в университете, и требования таковы: когда студент подает заявку на курс в университете, мне нужно создать приложение (планирую создать отдельную модель для приложения)
К этому приложению могут получить доступ как студент, так и университет. Целью обеспечения доступа к приложению для обоих является то, что есть много данных, которые будут обработаны позже!
Как создать общую таблицу приложения - чтобы оба могли получить доступ или неэффективно создавать отдельную таблицу?
Пожалуйста, подскажите, как с этим справиться!
Option1: Can a many to many be combined with Student and University to create a application model
Option2: Add manytomany field to students model itself with University as foreign key ?
У меня есть записи более 1 миллиона, поэтому я немного обеспокоен эффективностью! Какой вариант лучше для двусторонней связи
Лучшим способом справиться с этим будет промежуточная модель Application
, содержащая внешние ключи к Student
и University
.
Наличие обоих внешних ключей в модели Application гарантирует отношения "многие ко многим" между студентом и университетом.
Решение будет выглядеть следующим образом:
class Student(models.Model):
email = models.EmailField(max_length=255)
class University(models.Model):
name = models.TextField()
class Application(models.Model):
applicant = models.ForeignKey(
"Student",
on_delete=models.CASCADE
)
university = models.ForeignKey(
"University",
on_delete=models.CASCADE
)
Option1: Can a many to many be combined with Student and University to create an application model
На Вариант 1 ответил Ren. Для объяснения вы можете посмотреть Особенности и библиотеки Django Видео Мичиганского университета
Вариант 2: Это не будет соответствовать вашим требованиям. Действительно, Django автоматически сгенерирует таблицу для управления отношениями "многие-ко-многим". Вам нужно вручную указать промежуточную таблицу, вы можете использовать опцию through, чтобы указать модель Django, которая представляет промежуточную таблицу, которую вы хотите использовать. т.е. Вариант 1
См. ManyToManyField официальный документ.