我在 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
在 oracle 中为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 ''))
执行此语句允许插入语句具有DATE
字段的文字值。我检查了后端生成的查询,它正在'2013-03-20'
插入start_date
and end_date
。日期匹配NLS_DATE_FORMAT
,所以理论上应该可以!
更新:我相信我的案例与 cx_oracle 有关。
更新:由于我仍然没有明确的答案(尽管我几乎可以肯定是 cx_oracle 导致了这个问题),我把我的DateField
变成了一个DateTimeField
可以翻译成 oracle 的TIMESTAMP
并且工作得很好。