0

我有一个名为 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。我是否需要使用某种闭包来完成此操作?不知道该怎么做。

4

1 回答 1

1

解决这个问题的最简单方法是在 lambda 中使用关键字参数:

user = User.objects.get(username="jamie")
sorted(Task.objects.all(), key = lambda task, user=user: task.date_for_display(user))

这会将用户从外部范围复制到 lambda 的本地范围。

于 2012-10-03T16:00:22.663 回答