Python 如何修复django中的双for循环

Python 如何修复django中的双for循环,python,django,templates,Python,Django,Templates,html显示LostNotices和Dogs 我想在dog模型中使用外键匹配lostnotice和dog 所以我在模板中使用了for循环和if 但它不起作用 我试图修复这两天,但我不能 这对我会有很大的帮助。多谢各位 {% for lostPost in lostPosts.all reversed %} <h6>{{lostPost.id}}</h6> {% for dog in dogs.all %}

html显示LostNotices和Dogs

我想在dog模型中使用外键匹配lostnotice和dog

所以我在模板中使用了for循环和if

但它不起作用

我试图修复这两天,但我不能

这对我会有很大的帮助。多谢各位

{% for lostPost in lostPosts.all reversed %}
              <h6>{{lostPost.id}}</h6>
              {% for dog in dogs.all %}
              <h6>{{dog.breed}}</h6><br>



              <div class="col-lg-3 col-sm-6 col-md-6">
                <div class="card">
                  <div class="card-body">
                    {% if dog.LostNoticeNum == lostPost.id %}
model.py

class LostNotice(models.Model):
    Title=models.CharField(max_length=20,null=True)
    State=models.IntegerField()
    PubDate=models.DateTimeField()
    MissingDate=models.DateTimeField()
    Text=models.TextField()
    Phone=models.CharField(max_length=20,null=True)
    Author=models.ForeignKey(Member, on_delete = models.CASCADE,null=True)

    Si=models.CharField(max_length=20,null=True)
    Gu=models.CharField(max_length=20,null=True)
    Dong=models.CharField(max_length=20,null=True)

class Dog(models.Model): 
    Name=models.CharField(max_length=20)
    Breed=models.CharField(max_length=20)
    Sex=models.CharField(max_length=20,null=True)
    Color=models.CharField(max_length=20,null=True)
    LostNoticeNum=models.ForeignKey(LostNotice, on_delete = models.CASCADE,null=True)
    FindNoticeNum=models.ForeignKey(FindNotice, on_delete = models.CASCADE,null=True)

模板:

<div class="" id="list">
      <div class="container">
        <div class="row mx-auto">
          <div class="col-lg-12 col-sm-12 col-md-12 col-12 pr-1">
            <div class="row mb-2 ml-2 mr-2">

              {% for lostPost in lostPosts.all reversed %}
              <h6>{{lostPost.id}}</h6>
              {% for dog in dogs.all %}
              <h6>{{dog.breed}}</h6><br>



              <div class="col-lg-3 col-sm-6 col-md-6">
                <div class="card">
                  <div class="card-body">
                    {% if dog.LostNoticeNum == lostPost.id %}
                    <h6>breed</h6>
                    <h6 class="card-title" style="text-align: center; color: gray">{{dog.Breed}}</h6>
                    {% else %}
                    <h6 class="card-title" style="text-align: center">{{lostPost.sex}}</h6>

                    {% endif %}
                    {{lostPost.photo}}
                    {% if lostPost.photo %}
                    <img class="card-img-top rounded-circle mx-auto pt-1" src="{{ lostPost.photo.url }}"
                      style="height: 200px">
                    {% else %}
                    <img class="card-img-top rounded-circle mx-auto pt-1"
                      src="https://image.flaticon.com/icons/svg/2138/2138440.svg" style="height: 200px">



                    <h4 class="card-title">{{lostPost.pet_name}}</h4>
                    <p class="card-text"> text: {{lostPost.Text}} <br> location: {{lostPost.Si}}<br>date :
                      {{lostPost.MissingDate}}</p>
                    <a href="{% url 'lostListDetail' %}" class="btn btn-primary">more</a>
                    {% endif %}
                  </div>
                </div>
              </div>
              {% endfor %}
              {% endfor %}

            </div>
          </div>
        </div>
      </div>
    </div>

{lostPosts.all中lostPost的%s已反转%}
{{lostPost.id}
{%用于狗中的狗。所有%}
{{狗.品种}}
{%if dog.LostNoticeNum==lostPost.id%} 繁殖 {{狗.品种} {%else%} {{lostPost.sex} {%endif%} {{lostPost.photo} {%if lostPost.photo%} {%else%} {{lostPost.pet_name} 文本:{{lostPost.text}
位置:{{{lostPost.Si}}
日期: {{lostPost.MissingDate}

{%endif%} {%endfor%} {%endfor%}
您可以使用
.dog\u set访问相关的狗。所有

{% for lostPost in lostPosts reversed %}
    <h6>{{lostPost.id}}</h6>
    {% for dog in lostPost.dog_set.all %}
        <h6>{{dog.breed}}</h6><br>
        …
    {% endfor %}
{% endfor %}

谢谢你的评论!但我不知道“dog_set”和“prefetch_related(‘dog’)”是从哪里来的。LostNotice模型中没有“dog”属性。。。像这样使用double-for-loop可以吗?@YeinKoo:不,这样的double-for-loop不仅“难看”(从你需要阅读才能理解的意义上讲),而且效率也很低。想象一下,以后你有1百万只狗,1百万只丢失的门柱,那么这将需要1T个周期(而访问
dog\u集
仍将导致1百万个周期)。
dog\u集(和
dog
)是隐式定义的:通过定义
ForeignKey
dog
LostNotice
,Django反向定义了一个关系。@YeinKoon:所以您根本不需要定义
dog
。Django为您定义了反向关系,它能够通过反向关系本身加载和获取对象。通过使用预回迁,我不必使用双for循环!是这样吗?@YeinKoo:这个想法是Django将获取所有相关的狗,并在Python/Django层进行连接,从而避免N+1问题。在模板中,我们仍然有一个嵌套的
{%for%}
循环,但是
lostPost.dog\u集合。所有
只包含相关的狗。
{% for lostPost in lostPosts reversed %}
    <h6>{{lostPost.id}}</h6>
    {% for dog in lostPost.dog_set.all %}
        <h6>{{dog.breed}}</h6><br>
        …
    {% endfor %}
{% endfor %}
def lostList(request):
    lostPosts = LostNotice.objects.prefetch_related('dog')
    dogs=Dog.objects
    return render(request, '/lostList.html', {'lostPosts' : lostPosts})