Opened 16 years ago
Closed 16 years ago
#10313 closed (invalid)
TypeError coercing to Unicode on DateTime Field
Reported by: | pvickers | Owned by: | nobody |
---|---|---|---|
Component: | Uncategorized | Version: | 1.0 |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
The error I'm getting is
TypeError at /admin/dbasite/dbeventhistory/add/
coercing to Unicode: need string or buffer, datetime.datetime found
This occurs after doing a simple add using the automatically generated code by the Django admin interface.
I'm running Django 1.0, using cx_Oracle to connect to an Oracle database.
The cx_Oracle I have installed is version 5.0.1 but this exact same error also happens using version 4.4.
I have reproduced this error using Oracle 9i and Oracle 10g. On Oracle 10g, I tested using Oracle characterset WE8ISO8859P1 and UTF8 - the error still occurs.
I have a very simple model defined as:
class DBEventHistory(models.Model): event_date = models.DateTimeField() description = models.CharField(max_length=1024) dba = models.ForeignKey(DBA) def __unicode__(self): return self.event_date class Meta: db_table = u'DB_EVENT_HISTORY' verbose_name_plural = ('DB Event History')
The trace back I get is:
Environment: Request Method: POST Request URL: http://cls049:8000/admin/dbasite/dbeventhistory/add/ Django Version: 1.0-final-SVN-unknown Python Version: 2.4.3 Installed Applications: ['django.contrib.auth', 'django.contrib.admin', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'dbinfo.dbasite'] Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware') Traceback: File "/usr/lib/python2.4/site-packages/django/core/handlers/base.py" in get_response 86. response = callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python2.4/site-packages/django/contrib/admin/sites.py" in root 158. return self.model_page(request, *url.split('/', 2)) File "/usr/lib/python2.4/site-packages/django/views/decorators/cache.py" in _wrapped_view_func 44. response = view_func(request, *args, **kwargs) File "/usr/lib/python2.4/site-packages/django/contrib/admin/sites.py" in model_page 177. return admin_obj(request, rest_of_url) File "/usr/lib/python2.4/site-packages/django/contrib/admin/options.py" in __call__ 191. return self.add_view(request) File "/usr/lib/python2.4/site-packages/django/db/transaction.py" in _commit_on_success 238. res = func(*args, **kw) File "/usr/lib/python2.4/site-packages/django/contrib/admin/options.py" in add_view 507. self.log_addition(request, new_object) File "/usr/lib/python2.4/site-packages/django/contrib/admin/options.py" in log_addition 294. object_repr = force_unicode(object), File "/usr/lib/python2.4/site-packages/django/utils/encoding.py" in force_unicode 49. s = unicode(s) Exception Type: TypeError at /admin/dbasite/dbeventhistory/add/ Exception Value: coercing to Unicode: need string or buffer, datetime.datetime found
Change History (3)
follow-up: 2 comment:1 by , 16 years ago
Description: | modified (diff) |
---|
comment:2 by , 16 years ago
Replying to kmtracey:
I really don't think you want to be using cx_oracle
Oops, cat got involved in typing there, didn't mean to hit submit. I was going to say I didn't think you want to be using cx_oracle 5.0, but perhaps 5.0.1 fixes the bug we'd had reported on that one earlier, so I'm not sure about that. You might want to make sure 5.0.1 fixes the bug referenced here: http://code.djangoproject.com/ticket/9935#comment:4. (And all of this is an aside to the actual problem reported.)
comment:3 by , 16 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
You need to change your __unicode__
method to:
def __unicode__(self): return unicode(self.event_date)
[This is a Python requirement, nothing to do with Django. __unicode__
methods must return unicode (or, I guess, based on the message, string or buffer):
Python 2.5.1 (r251:54863, Jul 31 2008, 23:17:40) [GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> class Thing(object): ... def __init__(self, dt): ... self.dt = dt ... def __unicode__(self): ... return self.dt ... >>> import datetime >>> x = Thing(datetime.datetime.today()) >>> unicode(x) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: coercing to Unicode: need string or buffer, datetime.datetime found >>> unicode(x.dt) u'2009-02-20 11:39:35.925831' >>> class Thing2(object): ... def __init__(self, dt): ... self.dt = dt ... def __unicode__(self): ... return unicode(self.dt) ... >>> x = Thing2(datetime.datetime.today()) >>> unicode(x) u'2009-02-20 11:40:54.093501' >>>
Returning x from a __unicode__
method where unicode(x) would turn x into unicode isn't sufficient, Python requires that the __unicode__
method do that explicitly.]
[Fixed formatting. Please use preview.]
I really don't think you want to be using cx_oracle