TypeError:未绑定方法必须使用DateTime实例作为第一个参数调用Date()(改为获取int实例)

时间:2013-10-23 19:52:30

标签: python date datetime int

好的,我正在开发一个图书馆PLOW网站(这是一个爱荷华州图书馆系统的表格网站)。我无法弄清楚如何格式化日期覆盖字段,以便当有人尝试提交表单时,它不会向他们提供消息“日期必须是未来日期”。可能还有其他东西会阻止表单通过,但我认为就是这样。

(请注意,我不是程序员,对HTML知之甚少,我刚刚有几个快速教程。)

这是我收到的错误消息: TypeError: unbound method Date() must be called with DateTime instance as first argument (got int instance instead)

这就是我要做的事情: 当我进入“覆盖”时,有三个大胆的标题可供选择:“默认表达式”,“自定义验证器”和“启用表达式”。除了“自定义验证器”之外,所有这些都是空白的:{{1}无论将来有多远,它都会显示错误消息“日期必须是未来日期”,无论将来会有多远。

我很困惑为什么这不起作用,在做了一些Google搜索之后我想出了这个:python: test(value < DateTime(),False,'Date must be a future date'),这就是我收到此错误消息的地方:

python: test(value < DateTime.Date(2013, 10, 23),False,'Date must be a future date')

帮助?我想要的是所有未来的日期都可以工作,以前是不是很好,网站只是有一个我无法识别的不同问题?

注意:“小于”符号周围有空格,原本不在那里,但是您的网站认为我告诉它代码。

2 个答案:

答案 0 :(得分:4)

此错误:

  

TypeError:未绑定方法必须使用DateTime实例作为第一个参数调用Date()(改为使用int实例)

...当你尝试在类本身上调用一个普通的实例方法而不是类的实例时,你会得到的。*(还有其他情况可以出现,但这是迄今为止最常见的。)你的代码确实在类本身上调用了一个方法:

DateTime.Date(2013, 10, 23)

我不知道这个DateTime类或它的Date方法是什么,但是如果它们与标准库的datetime.datetime类及其date类似方法,你做错了。

datetime模块有时会引起混淆,因为模块和其中一个类具有相同的名称。并且,为了增加混淆,该类的某些方法与模块中的其他类或函数具有相同的名称。因此,这是构造date对象的完全有效的方法:

import datetime
d = datetime.date(2013, 10, 23)

...这构造了相同的对象:

import datetime
d = datetime.datetime(2013, 10, 23).date()

......这样做:

from datetime import datetime
d = datetime(2013, 10, 23).date()

...但这是尝试在date类上调用datetime实例方法,这是无意义的,并且会引发您看到的同类异常。

from datetime import datetime
d = datetime.date(2013, 10, 23)

*如果您想知道为什么会出现此错误以及这意味着什么,您必须了解绑定与未绑定方法,如何调用绑定方法等。This blog post尝试解释它。但是你可能不需要知道所有这些来解决你的问题。

答案 1 :(得分:0)

为了让测试工作,必须要做一些事情:

  • value必须是日期
  • DateTime()必须返回今天的日期

我的猜测是value实际上是一个字符串,您需要在尝试比较之前将其转换为日期。如果您真的幸运,这将有效:

DateTime(value) < DateTime()

否则,您需要确切了解value的值是什么,然后从那里开始。