是timezone.now()。date函数还是可调用的?

时间:2014-03-26 12:09:36

标签: django function callback django-managers

我在Django 1.5中写了一个经理。我想返回一个QuerySet,其中包含具有今天或将来开始日期的对象。基于先前问题的this answer,我假设我的经理需要使用可调用而不是函数。我写过:

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

编辑您的混淆源于对上一个问题的误读。这是关于模型字段声明中使用的默认值:作为状态中的答案,您需要使用可调用而不是值,因为声明是在首次导入时计算的。

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

(另外,你应该使用" callable"而不是" callback"这里:回调意味着某种异步行为,这不是什么'发生了。)

答案 1 :(得分:1)

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)