Django фильтрация моделей по внешнему ключу

Models.py

class AdmissionStudent(models.Model):
   studentlabel = models.CharField(max_length = 100, null = False, blank = False)

   def __str__(self):
       return self.studentlabel


class AdmissionRequirement(models.Model):
   requirementstudent = models.ForeignKey(AdmissionStudent, on_delete = models.CASCADE, null = 
     False, blank = False)
   requirementparagraph = models.TextField(null = False, blank = False)

   def __str__(self):
       return '{} - {}'.format(self.requirementstudent, self.requirementparagraph)

Views.py

def admission(request):
   header = AdmissionHeader.objects.first()
   student = AdmissionStudent.objects.all()
   requirement = AdmissionRequirement.objects.all()


   context = {
       'header': header,
       'student': student,
       'requirement': requirement,
       'title':'Admissions'
       }

   return render(request, 'pages/admission.html', context)

Admission.html (шаблон)

{% for student in student %}
   <b>{{ student.studentlabel }}</b><br>
   {% if {{ student.studentlabel}} == {{requirement.requirementstudent }} %}
       {% for requirement in requirement %}
           {{ requirement.requirementparagraph }}<br>
       {% endfor %}
{% endfor %}

Я знаю, что то, что я сделал в своем шаблоне, глупо, но я действительно не знаю, как фильтровать требования к зачислению, Ниже приведен пример того, как я хочу, чтобы это отображалось:

Передатчик

-1-е требование

-2-е требование

-3-е требование

Иностранный студент

-1-е требование

-2-е требование

-etc

Вы можете просто получить все AdmissionStudent, и предварительно получить все связанные AdmissionRequirement для каждого студента.

При этом вам не нужно requirement = AdmissionRequirement.objects.all(). Вам просто нужно передать список студентов в шаблон следующим образом:

student = AdmissionStudent.objects.all().prefetch_related('admissionrequirement_set')
context = {
    ...
    'student': student,
    ...
}

Затем в своем шаблоне используйте связанные данные для требований от студента, чтобы отобразить:

{% for student in student %}
   <b>{{ student.studentlabel }}</b><br>
   {% for requirement in student.admissionrequirement_set.all %}
       {{ requirement.requirementparagraph }}<br>
   {% endfor %}
{% endfor %}
Вернуться на верх