我在Django 1.5中写了一个经理。我想返回一个QuerySet
,其中包含具有今天或将来开始日期的对象。基于先前问题的this answer,我假设我的经理需要使用可调用而不是函数。我写过:
...
return super(UpcomingEventManager, self).get_query_set().filter(date__gte=timezone.now().date)
我将该代码视为可调用的(date
),它依赖于函数(timezone.now()
)来获取其值。但Django会将其视为可调用还是函数?
我知道我可以通过创建一个对象并等到明天来测试它,但我完全理解这一点。
答案 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)