Django - Oracle后端错误

Azi*_*ari 5 oracle django cx-oracle django-orm oracle10g

我在Django中有以下模型:

class Event(models.Model):
    # some fields
    start_date = models.DateField()
    end_date = models.DateField()
Run Code Online (Sandbox Code Playgroud)

我正在使用带有Django 1.5和cx_oracle 5.1.2的Oracle 10g数据库.这里的问题是当我尝试在管理界面中创建一个新对象(从日历中选择日期)时,会引发以下错误:

ORA-01843: not a valid month
Run Code Online (Sandbox Code Playgroud)

syncdb创造了DATE在Oracle领域start_dateend_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 ''))
Run Code Online (Sandbox Code Playgroud)

执行此语句允许insert语句具有DATE字段的文字值.我已经检查由后端生成的查询,它是插入'2013-03-20'start_dateend_date.日期匹配NLS_DATE_FORMAT,所以这在理论上应该有效!

更新:我相信我的案例与cx_oracle有关.

更新:因为我仍然没有一个明确的答案(虽然我几乎可以肯定它是导致这个问题的cx_oracle),但是我把我DateField改成了一个DateTimeField转换成oracle的TIMESTAMP并完美地工作.

cat*_*ine -2

错误的原因是您输入了日期,但该日期的月份部分不是有效的月份。Oracle针对这个问题给出了解决方案。

1MONTH - 使用或格式掩码重新输入日期值MON。月份的有效值为:

January
February
March
.......
//and soon
Run Code Online (Sandbox Code Playgroud)

或者

Jan
Feb
Mar
.......
//and soon
Run Code Online (Sandbox Code Playgroud)

2 - 如果上述解决方案失败,请改用to_date function

to_date( string1, [ format_mask ], [ nls_language ] )
Run Code Online (Sandbox Code Playgroud)