通过带参数的方法对Django对象进行排序

时间:2012-10-03 15:41:21

标签: python django

我有一个名为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。我是否需要使用某种闭包来实现这一目标?不知道如何去做。

1 个答案:

答案 0 :(得分:1)

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

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

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