Использование модели отношений "многие ко многим" в форме django
Я совсем новичок в использовании Django, но в основном у меня есть две модели: Студент и Модуль
class Student(models.Model):
student_id = models.CharField(max_length=4, unique=True)
name = models.CharField(max_length=150)
birthday = models.DateField()
class Module(models.Model):
name = models.CharField(max_length=150)
code = models.IntegerField()
student = models.ManyToManyField(Student)
Теперь мой вопрос: если я использую форму Django для добавления новых студентов в БД, как мне получить список модулей, которые у меня есть в БД.
Я могу добавить студентов в модуль для добавления новой формы модуля, но не уверен, как сделать это другим способом
А если, скажем, я хочу перечислить на странице все модули, которые посещает студент, как мне получить доступ к модулям, к которым имеют доступ эти студенты?
Любая помощь будет высоко оценена
как мне получить список модулей, которые у меня есть в БД.
Module.objects.all()
как я могу получить доступ к модулям, к которым имеют доступ и те студенты?
s = Student.objects.get(pk=1)
students_modules = s.module_set.all()
Существует множество способов решить эту задачу. Но более профессиональная практика заключается в перепроектировании схемы БД таким образом, чтобы исключить дублирование данных в базе данных, как описано ниже.
class Student(models.Model):
student_id = models.CharField(max_length=4, unique=True)
name = models.CharField(max_length=150)
birthday = models.DateField()
class Module(models.Model):
name = models.CharField(max_length=150)
code = models.IntegerField()
class StudentsModule(models.Model):
student = models.ForeignKey(Student)
module = models.ForeignKey(Module)
Пояснение
Если у вас есть список пользователей и вы хотите добавить в него Module
, то вам нужно получить список Students
(пк) из Student
Model.
Создайте новый Module
и получите pk
из Module
.
У вас есть список Students
и Module
, теперь вам нужно создать записи в модели StudentsModule
. Создайте новую строку для каждого Student
с помощью Module
.
Пример
Создать студентов
student_object1 = Student.objects.create(name="abc", birthday="2001-12-12")
student_object2 = Student.objects.create(name="xyz", birthday="2005-12-12")
Создать модуль
module_object = Module.objects.create(name="mno", code=123)
Создать модуль StudentsModule
StudnetsModule.objects.create(student=student1, module=module_object)
StudnetsModule.objects.create(student=student2, module=module_object)
Теперь вы можете получить доступ к списку Modules
, связанных с Student
и Students
, связанных с Module