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

dom*_*791 2 django django-templates django-models 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()
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

模板:

{% for offer in latest_offers %}

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

{% endfor %}
Run Code Online (Sandbox Code Playgroud)

{{offer.id}}完美无缺,但如何在同一行中访问order = 1的照片的ID?

Rob*_*elo 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()
Run Code Online (Sandbox Code Playgroud)

模板

{% for offer in latest_offers %}

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

{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

<img src="http://something.com/{{offer.id}}/{{offer.offerphotos_set.first.id}}.jpg">
Run Code Online (Sandbox Code Playgroud)

但我宁愿queries 显示信息之前做所有事情templates