Ben*_*Ben 3 python django datetime
我有以下Django模型:
created=models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
我现在需要一个模型对象方法,它显示自创建以来的小时数.我尝试了以下方法:
def hours_live(self):
diff=((datetime.datetime.now - self.created).seconds)/3600
return diff
Run Code Online (Sandbox Code Playgroud)
但它抛出了一个TypeError
unsupported operand type(s) for -: 'builtin_function_or_method' and 'datetime.datetime'
Run Code Online (Sandbox Code Playgroud)
然后我去了
def hours_live(self):
diff=((datetime.datetime.now() - self.created).seconds)/3600
return diff
Run Code Online (Sandbox Code Playgroud)
我的问题是datetime.datetime.now()表达式是在这里只执行一次,还是每次调用hours_live时都执行.
这会有用吗?
datetime.datetime.now是一种方法.当您在没有括号的情况下调用它时,您指的是方法本身,并且您无法从方法中减去时间.当您使用括号调用它时,您正在调用方法,获取返回值,然后使用它进行减法.
在您的示例中,每次调用函数时都会执行它.问题是当datetime.datetime.now()用作函数定义中参数的默认值时.在这种情况下,它只在加载模块时执行一次.
例如:(这是因为是危险的,因为仅计算当所述模块被加载一次):
def hours_live(since=datetime.datetime.now()):
return since - self.created
Run Code Online (Sandbox Code Playgroud)
你应该做的事情:
def hours_live(since=None):
if not since:
since = datetime.datetime.now()
return since - self.created
Run Code Online (Sandbox Code Playgroud)