Django related_name

时间:2012-11-08 20:58:02

标签: python mysql django

我正在尝试做类似的事情:

{% for property in current_listing %}
    {% for property_image in property.property_images.all %}

    {% endfor %}
{% endfor %}

但我想要像:

{% for property in current_listing %}
    {% for property_image in property.property_images.**ORDER_BY('-order')[0]** %}

    {% endfor %}
{% endfor %}

我该怎么做?

2 个答案:

答案 0 :(得分:3)

如果我了解您的需求,可以尝试custom template filter

from django import template
register = template.Library()

@register.filter
def get_first_ordered_by(queryset, order):
    return queryset.order_by(order)[0]

然后在模板上:

{% load my_tags %}

{% with image=property.property_images.all|get_first_ordered_by:'-order' %}
    {{ image }}
{% endwith %}

请注意,由于get_first_ordered_by的结果不可迭代,因此您无法使用{%for%}。

答案 1 :(得分:0)

您可以向Model的类定义添加一个返回所需查询的方法,然后从您的模板中获取该方法。