Django Queryset для включения и фильтрации связанных данных

Я пытаюсь создать шаблон со списком участников (взрослых и несовершеннолетних) и их последним временем регистрации и выезда.

Существует два типа участников, и они представлены в двух таблицах/моделях: AdultParticipant и MinorParticipant. MinorParticipants имеют связь внешнего ключа с ParentParticipant.

Информация о регистрации (checkin и checkout) хранится в одной таблице независимо от того, относятся ли данные регистрации к AdultParticipant или MinorParticipant. Одна запись в этой таблице фиксирует ссылку на участника и время регистрации и выписки.

У каждого участника может быть много регистраций. Запись о регистрации может иметь только одного участника.

Код в том виде, в котором он существует сейчас, делает все, что я хочу, за исключением того, что он отображает каждую запись регистрации участника. Я хочу отображать только последнюю запись участника.

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

Заранее благодарю. Вы очень цените меня.

Модели

class AdultParticipant(models.Model):

    first_name = models.CharField(max_length=50)
    middle_initial = models.CharField(max_length=50, blank=True)



class MinorParticipant(models.Model):

    first_name = models.CharField(max_length=50)
    middle_initial = models.CharField(max_length=50, blank=True)
    parent = models.ForeignKey(
        WaiverAdult, on_delete=models.CASCADE, related_name='minor_of_adult')



class CheckIn(models.Model):

    adult = models.ForeignKey(
        AdultParticipant, on_delete=models.CASCADE, blank=True, null=True, related_name='adult_checkin')

    minor = models.ForeignKey(
        MinorParticipant, on_delete=models.CASCADE, blank=True, null=True, related_name='minor_checkin')

    checkin = models.DateTimeField(blank=True, null=True)
    checkout = models.DateTimeField(blank=True, null=True)


Вид

class WaiverListView(ListView):
    
    participants_and_checkins = Participant.objects.all().order_by('created')

    queryset = participants_and_checkins

    context_object_name = "the_list"

    template_name = 'list.html'

Шаблон


{% for adult in the_list %}

  <tr>                         
   <td class="fs-6">

     {% for c in adult.adult_checkin.all|dictsortreversed:"checkin" %} 
               In: {{ c.checkin }}</br>
               Out: {{c.checkout}}</br>
     {% endfor %}
                         
   </td>
   <td>{{adult.last_name}}</td>
   <td>{{adult.first_name}}</td>
  </tr>


     {% for child in adult.minor_of_adult.all %} 
       <tr>
         <td class="fs-6">

           {% for c in child.minor_checkin.all|dictsortreversed:"checkin" %} 
               In: {{ c.checkin }}</br>
               Out: {{c.checkout}}
           {% endfor %}

         </td>
         <td>{{child.last_name}}</td>
         <td>{{child.first_name}}</td>
       </tr>
    {% endfor %}


{% endfor %}

в вашем шаблоне измените checkin.all на checkin.last.

Также можно избавиться от цикла for, например

In: {{ child.minor_checkin.last.checkin }}</br>
Out: {{child.minor_checkin.last.checkout}}
Вернуться на верх