3

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

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

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

这就是我想要做的: 当我进入“覆盖”时,有三个粗体标题可供选择:“默认表达式”、“自定义验证器”和启用表达式“。除了“自定义”之外,所有这些都是空白的Validator”,它说:python: test(value < DateTime(),False,'Date must be a future date')。对于给出的任何日期,这都会显示错误消息“Date must be a future date”,无论它在未来多远。

我对为什么这不起作用感到困惑,在进行了一些谷歌搜索后,我想到了这个:python: test(value < DateTime.Date(2013, 10, 23),False,'Date must be a future date')这就是我收到此错误消息的地方:

TypeError: unbound method Date() must be called with DateTime instance as first argument (got int instance instead)

帮助?我想要的是让所有未来的日期都能正常工作,之前是否还好,而网站只是有一个我无法识别的不同问题?

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

4

2 回答 2

6

这个错误:

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)

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

于 2013-10-23T19:59:41.947 回答
0

为了使测试工作,必须发生几件事:

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

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

DateTime(value) < DateTime()

否则,您需要准确找出value' 的值是什么,然后从那里开始。

于 2013-10-23T20:05:28.367 回答