是否有一种机制可以映射Django QuerySet项目而不触发其evaluation?
我想知道类似Python map的东西。一个函数,该函数使用一个函数将其应用于QuerySet,但保持惰性计算。
例如,使用Django文档example中的模型,是否有类似的东西? (不是真实代码):
>>> Question.objects.all().map(lambda q: q.pub_date + timedelta(hours=1))
保持懒惰的评估?
您可以使用values_list
获得您喜欢的任何列:
Question.objects.values_list('pub_date')
这比您自己煮的任何东西都简单。
例如,您可以为此使用注释
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