3

さて、私は図書館 PLOW Web サイト (アイオワ州の図書館システムの状態を示すフォーム Web サイト) に取り組んでいます。誰かがフォームを送信しようとしたときに、「日付は将来の日付でなければなりません」というメッセージが表示されないように、日付の上書きフィールドをフォーマットする方法がわかりません。代わりに、フォームの通過を妨げている何かが他にあるかもしれませんが、これだと思います。

(私はプログラマーではなく、HTML についてほとんど知らないことに注意してください。簡単なチュートリアルをいくつか受けただけです。)

これは私が得ているエラーメッセージです: TypeError: unbound method Date() must be called with DateTime instance as first argument (got int instance instead)

これは私がやろうとしていることです: 「オーバーライド」の下に行くと、「デフォルト式」、「カスタムバリデーター」、および「式の有効化」から選択できる3つの太字の見出しがあります。「カスタム」を除いて、それらはすべて空白ですValidator" これは次のように述べています: python: test(value < DateTime(),False,'Date must be a future date'). これにより、指定された日付がどれだけ未来であるかに関係なく、「日付は将来の日付でなければなりません」というエラー メッセージが表示されます。

なぜこれが機能しないのか混乱し、いくつかの Google 検索を行った後、私はこれを思いつきました: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: バインドされていないメソッド Date() は、DateTime インスタンスを最初の引数として呼び出す必要があります (代わりに int インスタンスを取得しました)

…は、クラスのインスタンスではなく、クラス自体で通常のインスタンス メソッドを呼び出そうとしたときに得られるものです。あなたのコードは実際にクラス自体のメソッドを呼び出しています:

DateTime.Date(2013, 10, 23)

DateTimeこのクラスまたはそのメソッドが何であるかはわかりませんがDate、標準ライブラリのdatetime.datetimeクラスとそのdateメソッドのようなものであれば、間違っています。

モジュールとそのdatetime中のクラスの 1 つが同じ名前であるため、モジュールが混乱を招くことがあります。さらに混乱を招くのは、そのクラスのメソッドのいくつかが、モジュール内の他のクラスまたは関数と同じ名前を持っていることです。したがって、これは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 に答える