3

我正在用 Django 1.5 编写经理。我想返回一个QuerySet包含今天或将来开始日期的对象。基于对上一个问题的回答,我认为我的经理需要使用可调用而不是函数。我写过:

...
return super(UpcomingEventManager, self).get_query_set().filter(date__gte=timezone.now().date)

我将该代码读为一个可调用的 ( date),它的值依赖于函数 ( timezone.now())。但是 Django 会将其视为可调用的还是函数?

我知道我可以通过创建一个对象并等到明天来测试它,但我宁愿完全理解这一点。

4

2 回答 2

9

Django 1.10 获取今天的日期:

>>> from django.utils import timezone
>>> timezone.now()
datetime.datetime(2016, 11, 29, 7, 23, 55, 924928, tzinfo=<UTC>)
>>> timezone.now().date
<built-in method date of datetime.datetime object at 0x7f42512b42a0>
>>> timezone.now().date()
datetime.date(2016, 11, 29)
于 2016-11-29T07:25:48.447 回答
7

您似乎以我在这里不认识的方式使用回调。

timezone.now()返回一个类型的值datetime.datetime。该类有一个属性 ,date它返回该值的日期部分。这里根本不涉及回调。

编辑您的困惑源于对上一个问题的误读。这是关于模型字段声明中使用的默认值:正如那里的答案所述,您需要使用可调用而不是值,因为声明是在第一次导入时评估的。

但这根本不是你在这里做的。您只是将一个值从另一个函数传递给一个函数。不涉及早期评估:将在调用函数时评估代码,因此使用date()today()在那里非常安全。事实上,在这种情况下,传递可调用而不是传递值将不起作用

(此外,您应该在这里使用“可调用”一词而不是“回调”:回调意味着某种异步行为,这不是正在发生的事情。)

于 2014-03-26T12:40:29.633 回答