Как просмотреть значение связанного внешнего ключа в Django из нескольких моделей

В моем проекте Django есть следующие модели из разных приложений

Модель студенческого приложения

from django.db import models

import batch.models
import course.models


class Student(models.Model):
    ACTIVE = 'Active'
    DROPPED = 'Dropped'
    TRANSFERRED = 'Transferred'
    INACTIVE = 'Inactive'
    studentStatus = [
        (ACTIVE, 'atv'),
        (DROPPED, 'drp'),
        (TRANSFERRED, 'trf'),
        (INACTIVE, 'inv'),
    ]
    first_name = models.CharField('First Name', max_length=30)
    last_name = models.CharField('Last Name', max_length=30)
    student_batch = models.ManyToManyField(batch.models.Batch,related_name='batch')
    contact_no = models.CharField('Contact No', max_length=20, null=True, blank=True)
    email_address = models.EmailField('Student Email', null=True, blank=True)
    student_status = models.CharField('Student Status', max_length=20, choices=studentStatus,
                                      default=ACTIVE)
    student_remark = models.CharField('Student Remark', max_length=255, null=True, blank=True)
    student_course = models.ManyToManyField(course.models.Course,related_name='course')
    created_on = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"{self.first_name} {self.last_name}"

Модель пакетного приложения

from django.db import models
from datetime import date, timezone
import course.models
import trainer.models
from django.contrib.auth.models import User


class Batch(models.Model):
    ACTIVE = 'Active'
    HOLD = 'Hold'
    SCHEDULED = 'Scheduled'
    CANCELED = 'Canceled'
    TRANSFERRED = 'Transferred'
    batchStatus = [
        (ACTIVE, 'act'),
        (HOLD, 'hld'),
        (SCHEDULED, 'scd'),
        (CANCELED, 'cld'),
        (TRANSFERRED, 'trd'),
    ]
    batch_course = models.ForeignKey(course.models.Course, on_delete=models.SET_NULL, blank=True, null=True)
    batch_trainer = models.ForeignKey(trainer.models.Trainer, on_delete=models.SET_NULL, blank=True, null=True)
    batch_time = models.TimeField('Batch Time', blank=True, null=True)
    batch_start_date = models.DateField('Batch Start Date', default=date.today)
    created_by = models.ManyToManyRel('Batch Created By', to=User)
    batch_status = models.CharField('Batch Status', choices=batchStatus, default=ACTIVE, max_length=20)
    created_on=models.DateTimeField(auto_now_add=True)
    updated_on=models.DateTimeField(auto_now=True)
    def __str__(self):
        return f"{self.batch_course} | {self.batch_time} | {self.batch_start_date}"

Модель приложения курса

from django.db import models
from django.core import validators


class Course(models.Model):
    name = models.CharField('Course Name', max_length=120)
    duration = models.PositiveIntegerField('Course Duration')
    created_on = models.DateTimeField(auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

хочу, чтобы в представлении студента выводился вывод, который показывает

данные всех студентов с соответствующим курсом и партией

eg:

Имя студента | Имя курса | Имя партии

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

student_detail = Student.objects.all().values("first_name", "student_course__name", "student_batch__batch_time").prefetch_related("student_batch", "student_course")

В вашей модели Course я не нашел поля name, поэтому я поместил batch_time вместо name для вашего понимания.

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