簡體   English   中英

使用外鍵的 Django 查詢

[英]Django Query using Foreign Key

我開始使用 django 中的查詢,並嘗試在 sql 中復制連接的結果。

我有兩個模型代表父母(WaiverAdult)和孩子(WaiverMinor)。 我想返回查詢集中的父項和子項,因此我可以將它們分組到一個格式化的模板中,如下所示:

  John Dad
    Tommy Son
    Amber Daughter

  Jen Jones
    Stevie Jones
    Mike Jones

楷模:

class WaiverAdult(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50, blank=True)

class WaiverMinor(models.Model):
    first_name = models.CharField(max_length=50, blank=True)
    last_name = models.CharField(max_length=50, blank=True)
    parent = models.ForeignKey(WaiverAdult, on_delete=models.CASCADE)

看法:

class WaiverListView(ListView):

    waiver_adults = WaiverAdult.objects.all().prefetch_related(
        'waiverminor_set').order_by('created')

    queryset = [adult.waiverminor_set.all() for adult in waiver_adults]

    context_object_name = "waiver_list"
    template_name = 'waiver/waiver_list.html'

模板示例概述我正在嘗試的內容:


                    {% for adult in waiver_list %}

                    <tr>
                        <td>{{adult.last_name}}, {{adult.first_name}}</td>
                    </tr>

                        {% for child in waiver_list %}
                            <tr>
                                <td>{{child.last_name}}, {{child.first_name}}</td>
                            </tr>
                        {% endfor %}


                    {% endfor %}

編寫此查詢的正確方法是什么? 先感謝您。 我真的很感激指導。

如果您希望訪問相關對象,最好的方法是預取它們,這樣您就不會在每次要訪問相關對象時再次訪問數據庫。 你可以這樣做:

waiver_adults = WaiverAdult.objects.all().prefetch_related('waiverminor_set').order_by('created')

這將是您的視圖的查詢集,因此您可以在視圖中編寫:

queryset = waiver_adults

然后在模板中,您可以通過以下方式以您想要的方式循環:

{% for adult in waiver_list %}

<tr>
    <td>{{adult.last_name}}, {{adult.first_name}}</td>
</tr>

  {% for child in adult.waiverminor_set.all %}
       <tr>
         <td>{{child.last_name}}, {{child.first_name}}</td>
       </tr>
  {% endfor %}

{% endfor %}

暫無
暫無

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

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