gpt4 book ai didi

python - Django ORM,按组/文件夹列出的最新项目/消息

转载 作者:行者123 更新时间:2023-11-30 22:56:17 27 4
gpt4 key购买 nike

我正在使用 Django 1.8,我有一些模型:

class Folder(models.Model):
title = models.CharField( max_length=255 )

class Message(models.Model):
title = models.CharField( max_length=255 )
folder = models.ForeignKey( Folder )

我需要在屏幕上显示包含最新消息的所有文件夹,但有限制(例如 10 个),例如:

F1:    F2:   F3:
m1 m3 m6
m2 m4 ..
m3 m5 ..
m10

我如何使用 django-orm 创建此查询?谢谢。

最佳答案

您可以在 Folder 模型中添加一个属性:

class Folder(models.Model):
title = models.CharField( max_length=255 )

@property
def latest_10_messages(self):
# order by id decreasing and get top 10
return self.message_set.order_by('-id')[:10]

然后在您的模板中您可以使用它:

{% for folder in folders %}
{{ folder.name }}

{% for msg in folder.latest_10_messages %}
{{ msg.title }}
{% endfor %}
{% endfor %}
<小时/>

更新以减少对数据库的查询次数:

如果您想减少查询数量,可以使用 Prefetch具有自定义查询集的对象:

prefetch_query = Prefetch('message_set__title', queryset=Message.objects.all().order_by('-id'), to_attr='message_titles')
folders = Folder.objects.all().prefetch_related(prefetch_query)

然后在模板中使用 slice 获取前 10 名:

{% for folder in folders %}
{{ folder.name }}

{% for msg in folder.message_titles|slice":10" %}
{{ msg }}
{% endfor %}
{% endfor %}

关于python - Django ORM,按组/文件夹列出的最新项目/消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074413/

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