Доступ к полям вложенных моделей django

Вопрос:Здесь сценарий: У меня есть модель студента с полем темы, связанным с отношением "многие ко многим" к предметной модели class Student(models.Model): (...) subject = models.ManyToManyField(Subject) В предметной модели у меня есть программное поле, связанное с отношением "многие ко многим" к модели программ. Тематическая модель получила также имя CharField. class Subject(models.Model): (...) program = models.ManyToManyField(Programs) В

Вопрос:

Здесь сценарий:

У меня есть модель студента с полем темы, связанным с отношением “многие ко многим” к предметной модели

class Student(models.Model): (…) subject = models.ManyToManyField(Subject)

В предметной модели у меня есть программное поле, связанное с отношением “многие ко многим” к модели программ. Тематическая модель получила также имя CharField.

class Subject(models.Model): (…) program = models.ManyToManyField(Programs)

В программе “Модели” у меня есть поле:

class Programs(models.Model): name = models.CharField(max_length=40) (…)

Django создает дополнительную таблицу для полей “много-ко-многим”. В моем приложении я создаю (с формой) Программу и Предмет, соответствующие Программе. Затем я создаю некоторых учеников и выбираю некоторые предметы.
Как я могу получить доступ к полю имени программы (Student.objects.all()) и отобразить, какое имя программы использует Student?
Возможно ли это, или мне нужно создать дополнительные поля в модели Student, связанные со отношениями” многие-ко-многим” с моделью программы?

Лучший ответ:

Я правильно понял, что вы хотите вернуть список имен программ для программ, принадлежащих каждому предмету в student.subject?

Если это так, вы можете использовать это как метод модели Student:

def get_program_names(self) programs = [] for subject in self.subjects: programs += [program.name for program in subject.program] return programs

Из вашего вопроса, однако, следует, что вы ожидаете возвращения только одного имени программы. если это так, то, возможно, вам следует заменить поля manyToMany полями ForeignKey, которые дают отношение один к одному между двумя моделями, что означает, что этот метод должен работать:

def get_program_name(self): return self.subject.program.name

(в любом случае нет причин, по которым вам нужно будет создать прямую связь между вашей моделью ученика и моделью программы, если вы не хотите уменьшить количество вызовов в базе данных, и в этом случае вы могли бы добавить поле к Студенту, обновляется с последним именем программы или аналогичным.)

Надеюсь, что я не совсем понял ваш вопрос.

Оцените статью
Добавить комментарий