﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
10015	contrib.comments inline on Postgres 8.3 fails to cast integer to text	Carl Meyer	Carl Meyer	"(This bug is related to #8554 and #6523).  If you display comments inline in the admin like so:

{{{
from django.contrib.contenttypes.generic import GenericTabularInline

class CarrotCommentInline(GenericTabularInline):
    model = CarrotComment
    ct_fk_field = 'object_pk'
    extra = 0
    fields = ('user', 'comment', 'ip_address', 'is_public', 'is_removed')
}}}

Postgres 8.3 will raise this error (for content object types with non-text primary keys):

{{{

Traceback (most recent call last):
  File ""/home/carljm/src/py/django/django-1.0.x/django/core/servers/basehttp.py"", line 635, in __call__
    return self.application(environ, start_response)
  File ""/home/carljm/src/py/django/django-1.0.x/django/core/handlers/wsgi.py"", line 239, in __call__
    response = self.get_response(request)
  File ""/home/carljm/src/py/django/django-1.0.x/django/core/handlers/base.py"", line 128, in get_response
    return self.handle_uncaught_exception(request, resolver, exc_info)
  File ""/home/carljm/src/py/django/django-1.0.x/django/core/handlers/base.py"", line 148, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)
  File ""/home/carljm/src/py/django/django-1.0.x/django/core/handlers/base.py"", line 86, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File ""/home/carljm/src/py/django/django-1.0.x/django/contrib/admin/sites.py"", line 157, in root
    return self.model_page(request, *url.split('/', 2))
  File ""/home/carljm/src/py/django/django-1.0.x/django/views/decorators/cache.py"", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File ""/home/carljm/src/py/django/django-1.0.x/django/contrib/admin/sites.py"", line 176, in model_page
    return admin_obj(request, rest_of_url)
  File ""/home/carljm/src/py/django/django-1.0.x/django/contrib/admin/options.py"", line 197, in __call__
    return self.change_view(request, unquote(url))
  File ""/home/carljm/src/py/django/django-1.0.x/django/db/transaction.py"", line 238, in _commit_on_success
    res = func(*args, **kw)
  File ""/home/carljm/src/py/django/django-1.0.x/django/contrib/admin/options.py"", line 592, in change_view
    formset = FormSet(instance=obj)
  File ""/home/carljm/src/py/django/django-1.0.x/django/contrib/contenttypes/generic.py"", line 303, in __init__
    prefix=self.rel_name
  File ""/home/carljm/src/py/django/django-1.0.x/django/forms/models.py"", line 350, in __init__
    defaults['initial'] = [model_to_dict(obj) for obj in self.get_queryset()]
  File ""/home/carljm/src/py/django/django-1.0.x/django/db/models/query.py"", line 185, in _result_iter
    self._fill_cache()
  File ""/home/carljm/src/py/django/django-1.0.x/django/db/models/query.py"", line 618, in _fill_cache
    self._result_cache.append(self._iter.next())
  File ""/home/carljm/src/py/django/django-1.0.x/django/db/models/query.py"", line 275, in iterator
    for row in self.query.results_iter():
  File ""/home/carljm/src/py/django/django-1.0.x/django/db/models/sql/query.py"", line 206, in results_iter
    for rows in self.execute_sql(MULTI):
  File ""/home/carljm/src/py/django/django-1.0.x/django/db/models/sql/query.py"", line 1734, in execute_sql
    cursor.execute(sql, params)
  File ""/home/carljm/src/py/django/django-1.0.x/django/db/backends/util.py"", line 19, in execute
    return self.cursor.execute(sql, params)
ProgrammingError: operator does not exist: text = integer
LINE 1: ...HERE (""carrot_comments_carrotcomment"".""object_pk"" = 8  AND ""...
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

}}}

This is because contrib.comments uses a text field type for the PK portion of its generic foreign key, and Postgres 8.3 does not automatically cast an integer to text.

This same core problem was already worked around once in [8641], which fixed #8554.  This case is more difficult to work around, as the offending lookup is part of the  BaseGenericInlineFormset code, and we can't just add an explicit cast there.  Maybe the object_pk field type could be introspected to check if a cast is needed?  Or perhaps there's a more appropriate general solution at the PostgreSQL db backend level."	Bug	closed	Database layer (models, ORM)	1.4	Normal	fixed	postgresql, pk	me@… ramusus@… tjurewicz@…	Accepted	0	0	0	0	0	0
