Map(应用函数)Django QuerySet

问题描述 投票:6回答:2

是否有一种机制可以映射Django QuerySet项目而不触发其evaluation

我想知道类似Python map的东西。一个函数,该函数使用一个函数将其应用于QuerySet,但保持惰性计算。

例如,使用Django文档example中的模型,是否有类似的东西? (不是真实代码):

>>> Question.objects.all().map(lambda q: q.pub_date + timedelta(hours=1))

保持懒惰的评估?

django lazy-evaluation
2个回答
0
投票

您可以使用values_list获得您喜欢的任何列:

Question.objects.values_list('pub_date')

这比您自己煮的任何东西都简单。


0
投票

例如,您可以为此使用注释

from datetime import timedelta
from django.db.models import F, ExpressionWrapper, DateTimeField

Question.objects.annotate(
    new_pub_date=ExpressionWrapper(
       F('pub_date') + timedelta(hours=1), 
       output_field=DateTimeField()
    )
)

对于比本示例稍微复杂的事情,可以使用Func,Case,When

© www.soinside.com 2019 - 2024. All rights reserved.