【问题标题】:How to access properties of another table in one-to-many relationship using django template language?如何使用 django 模板语言以一对多关系访问另一个表的属性?
【发布时间】:2015-12-13 14:06:36
【问题描述】:

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

模型.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?

【问题讨论】:

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


    【解决方案1】:

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

    相反,您可以在 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

    【讨论】:

    • 打败我。只是想补充一点,正如您所指出的,OP 的问题offerphotos 应该是offerphotos_set。他们也可以以同样的方式进行{% with offer.offerphotos_set.all|first as image %} 的工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2012-04-30
    • 2011-04-19
    • 2019-02-20
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多