Один объект из набора запросов
Мне нужна помощь с небольшой проблемой, с которой я сталкиваюсь в своем проекте. У меня есть модель, в которой есть внешний ключ с большим количеством записей, и я хотел бы взять только один элемент из этих записей. Фактически, моя проблема заключается в следующем: Мне нужно получить идентификатор одной миссии, чтобы использовать другие функции. Код работает нормально, моя проблема в том, что я не знаю, в каком порядке получить элемент миссии из этого набора запросов:
models.py
views.py
def student_mission_list(request, pk):
student = Student.objects.get(id=pk)
student_training_course = StudentTrainingCourse.objects.get(
student_id=student)
missions = StudentMission.objects.filter(
student_training_course_id=student_training_course)
context = {
'student': student,
'missions': missions,
}
return render(request, 'mission/student_mission_list.html', context)
На самом деле, в student_mission_list мне нужно получить идентификатор миссии!!! Проблема в том, что если я пытаюсь получить его из модели StudentTraining или MissionEntryStatus, у меня есть несколько миссий; но я хотел бы иметь только соответствующий идентификатор миссии, но я не могу найти способ. Есть ли какие-нибудь предложения? Возможно, мне нужно изменить базу данных, но я не знаю где. Большое спасибо всем вам за помощь
Так, как вы сейчас настроили, у курса обучения может быть только ОДИН студент, но, поскольку ForeignKey является отношением ManyToOne, МНОГО студентов могут иметь один и тот же курс обучения. Я думаю вы хотите, чтобы у студента был ОДИН курс обучения, но у курса обучения было МНОГО студентов. Я предполагаю, что вам нужно следующее:
class Student(models.Model):
...
training_course = models.ForeignKey(StudentTrainingCourse, on_delete=models.CASCADE)
...
Затем вы можете получить идентификатор конкретной миссии, например:
def student_mission_list(request, pk):
student = Student.objects.get(id=pk)
training_course = student.training_course
mission = Mission.objects.get(training_course=training_course)
# If you just want the mission ID:
mission_id = mission.pk
missions = StudentMission.objects.filter(
student_training_course_id=student_training_course)
context = {
'student': student,
'missions': missions,
}
return render(request, 'mission/student_mission_list.html', context)