私はDjangoに次のモデルを持っています:
class Event(models.Model):
# some fields
start_date = models.DateField()
end_date = models.DateField()
Django 1.5 および cx_oracle 5.1.2 で Oracle 10g データベースを使用しています。ここでの問題は、管理インターフェイス (カレンダーから日付を選択) で新しいオブジェクトを作成しようとすると、次のエラーが発生することです。
ORA-01843: not a valid month
syncdb
はとDATE
のオラクルにフィールドを作成しました。これはバックエンドのバグのように見えますか、それとも何か間違っていますか?start_date
end_date
私は他のモデルを持っていDateTimeField()
ますが、新しいオブジェクトを永続化すると問題なく動作します。問題はDateField
それ自体に関連しているように見えます。
更新:バックエンドの実装を確認しました。backends/oracle/base.py
行 513 から 516 で:
cursor.execute(
"ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'"
" NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF'"
+ (" TIME_ZONE = 'UTC'" if settings.USE_TZ else ''))
このステートメントを実行すると、insert ステートメントがDATE
フィールドのリテラル値を持つことができます。バックエンドによって生成されたクエリを確認したところ、 and に挿入さ'2013-03-20'
れています。日付が一致するので、理論的にはこれでうまくいくはずです!start_date
end_date
NLS_DATE_FORMAT
更新: 私のケースはcx_oracle に関連していると思います。
更新:私はまだ明確な答えを持っていないので (この問題を引き起こしているのは cx_oracle であるとほぼ確信していますが)、私を oracle に変換し、完全に正常に動作DateField
する aに変更しました。DateTimeField
TIMESTAMP