我有一个名为Task的模型,它根据用户返回日期。它定义了一个方法:
def date_for_display(self, user):
# return some date for the task
我想创建一个按此方法返回的日期排序的任务列表。我试过像:
user = User.objects.get(username="jamie")
sorted(Task.objects.all(), key = lambda task: task.date_for_display(user))
但无济于事。我得到NameError: global name 'user' is not defined
。我是否需要使用某种闭包来实现这一目标?不知道如何去做。
答案 0 :(得分:1)
解决此问题的最简单方法是在lambda中使用关键字参数:
user = User.objects.get(username="jamie")
sorted(Task.objects.all(), key = lambda task, user=user: task.date_for_display(user))
这会将用户从外部作用域复制到lambda的本地作用域。