Использование модели отношений "многие ко многим" в форме 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

Вернуться на верх