如何使用django模板语言以一对多的关系访问另一个表的属性?

时间:2015-09-16 20:16:07

标签: django django-models django-templates django-views

我想在模板中的硬编码img src中使用与一对多关系连接的不同表中的属性。

Models.py:

    class Offers(models.Model):
        province = models.CharField()
        district = models.CharField()
        location = models.CharField()

    class OffersPhotos(models.Model):
        offers_id = models.ForeignKey('Offers')
        order = models.IntegerField()

Views.py:

def index(request):

    latest_offers = Offers.objects.order_by('-creation_date')[:5]

    context_dict = {'latest_offers': latest_offers}

    return render(request, 'something.html', context_dict)

模板:

{% for offer in latest_offers %}

    <img src="http://something.com/{{offer.id}}/{{offer.offersphotos.id}}.jpg">

{% endfor %}

{{offer.id}}效果很好,但如何在同一行中访问order = 1的照片的ID?

1 个答案:

答案 0 :(得分:6)

我认为查询给定offerphotos的所有offer并获取模板中的第一个不是一个好主意。

相反,您可以在Offers课程中定义一个属性,大豆可以获得第一个photo

它应该是这样的:

Models.py

class Offers(models.Model):
    province = models.CharField()
    district = models.CharField()
    location = models.CharField()
    def first_offerphoto(self):
        return self.offerphotos_set.first()

<强>模板

{% for offer in latest_offers %}

    <img src="http://something.com/{{offer.id}}/{{offer.first_offerphoto.id}}.jpg">

{% endfor %}

虽然您仍然可以使用template中的逻辑:

<img src="http://something.com/{{offer.id}}/{{offer.offerphotos_set.first.id}}.jpg">

但我宁愿在向queries显示信息之前完成所有templates