Как просмотреть значение связанного внешнего ключа в 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 для вашего понимания.