gpt4 book ai didi

python - Django 告诉最后一个项目是否具有双重排序中的某些属性(order_by)

转载 作者:行者123 更新时间:2023-12-01 02:21:43 27 4
gpt4 key购买 nike

在 Django 查询集中,如何判断我所在的列表项(迭代时)是否是具有特定属性的列表项。

示例:我通过以下方式订购查询集:

  MyModel.objects.all().order_by('-featured', '-created_at')

因此,所有对象首先按其适当的时间排序,然后所有非特色项目也按时间正确排序。

在模板中进行迭代时,我希望能够判断是否已点击双重排序中的最后一个“特色”项目(例如,featured = True)。

示例用法:如果最后一项 -> 显示分隔特色/非特色的横幅 -> 继续迭代,在横幅后显示非特色。

{% for object in object_list %}
# display object
{% if last item with attribute %}
# display banner
{% endif %}
{% endfor %}

我知道我可以执行另一个查询集来获取计数,但这是我想避免的额外查询。

最佳答案

您可以使用 itertools.groupby 对查询集中的项目进行分组在将其传递给模板之前。然后,当组键从 True 更改为 False 时,您将显示横幅:

from itertools import groupby

qs = MyModel.objects.all().order_by('-featured', '-created_at')
grouped_qs = groupby(qs, lambda x: x.featured)

然后在您的模板中:

{% for k, g in grouped_qs %}
{% if not k %}
<!- show banner -->
{% endif %}

{% for model_obj in g %}
<!- do something with model_obj -->
{% endfor %}
{% endfor %}

关于python - Django 告诉最后一个项目是否具有双重排序中的某些属性(order_by),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47892954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com