Django在视图中保留外键

时间:2017-09-14 12:05:14

标签: python django foreign-keys

我在模板中有一个反向查询,该模板处理与外键连接在一起的两个表。该查询给出了我现在想要的结果,但在将来,很明显会给我带来严重的查询优化问题。我将查询发送到数据库,查找与我正在使用的表相关的所有图片,而不是只显示其中一个。

我无法适应我在HTML模板中编写的反向查询的视图函数。

以下是我的工作代码:

models.py

中的

class EtkinlikModel(models.Model):
    ...

class FotografModel(models.Model):
    etkinlik = models.ForeignKey(EtkinlikModel, on_delete=models.CASCADE)
views.py

中的

def EtkinlikView(request):
 etkinlikler = EtkinlikModel.objects.all().order_by("-olusturulma_tarihi")[:4]
    template = “…”
    context = {
        "pageName": title,
        "etkinlikler" : etkinlikler
    }
    return render(request,template,context)
template.html

中的

{% for etkinlik in etkinlikler  %}
    {{ etkinlik.etkinlik_adi }}

    {% for foto in etkinlik.fotografmodel_set.all|slice:":1"  %}
        {{ foto.foto }}
    {% endfor %}
{% endfor %}

代码用于减少查询负载

views.py

def EtkinlikView(request):
    etkinlikler = EtkinlikModel.objects.all().order_by("-olusturulma_tarihi")[:4]
    for etkinlik in etkinlikler:
        foto = etkinlik.fotografmodel_set.all()
    template = “…”
    context = {
        "pageName": title,
        "etkinlikler" : etkinlikler,
        "foto":foto
    }
    return render(request,template,context)
template.html

中的

{% for etkinlik in etkinlikler  %}
    {{ etkinlik.etkinlik_adi }} {{ etkinlik.id }}
       {% for f in foto  %}
            {{f.foto}}
       {% endfor %}
{% endfor %}

每个etkinlik对象中只重复显示一个foto的结果

2 个答案:

答案 0 :(得分:2)

def EtkinlikView(request):
    etkinlikler = EtkinlikModel.objects.all().order_by("-olusturulma_tarihi")[:4]
    template = "…"
    context = {
        "pageName": title,
        "etkinlikler" : etkinlikler,
    }
    return render(request,template,context)
模板中的

{% for etkinlik in etkinlikler  %}
{{ etkinlik.etkinlik_adi }} {{ etkinlik.id }}
   {{ etkinlik.fotografmodel_set.first.foto }}
{% endfor %}

希望这会有用

答案 1 :(得分:2)

模板中的

{% for etkinlik in etkinlikler  %}
{{ etkinlik.etkinlik_adi }} {{ etkinlik.id }}
   {{ etkinlik.fotografmodel_set.first.foto }}
{% endfor %}