簡體   English   中英

Django Queryset 包含和過濾相關數據

[英]Django Queryset to include and filter related data

我正在嘗試呈現一個包含參與者(成人和未成年人)列表及其最新簽到和簽出時間的模板。

有兩種類型的參與者,它們在兩個表/模型中表示:AdultParticipant 和 MinorParticipant。 MinorParticipants 與 ParentParticipant 有外鍵關系。

簽入信息(簽入和簽出)存儲在單個表中,無論簽入數據是指 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 = AdultParticipant.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.all 更改為checkin.last

你也可以擺脫 for 循環,比如

In: {{ child.minor_checkin.last.checkin }}</br>
Out: {{child.minor_checkin.last.checkout}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM