Opened 16 years ago

Closed 16 years ago

Last modified 16 years ago

#6210 closed (invalid)

ProgrammingError at /admin/redirects/redirect/add/

Reported by: isoemail@… Owned by: nobody
Component: Contrib apps Version: 0.96
Severity: Keywords: redirects
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

ProgrammingError at /admin/redirects/redirect/add/
operator does not exist: integer * unknown LINE 1: ...tsite"."id" WHERE ("django_redirectsite"."id" ILIKE '1' ... HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Request Method: POST
Request URL: http://localhost:8000/admin/redirects/redirect/add/
Exception Type: ProgrammingError
Exception Value: operator does not exist: integer
* unknown LINE 1: ...tsite"."id" WHERE ("django_redirectsite"."id" ILIKE '1' ... HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Exception Location: D:\Python25\Lib\site-packages\django\db\backends\util.py in execute, line 12
Traceback (innermost last)
Switch to copy-and-paste view

  • D:\Python25\Lib\site-packages\django\core\handlers\base.py in get_response
    1. # Apply view middleware
    2. for middleware_method in self._view_middleware:
    3. response = middleware_method(request, callback, callback_args, callback_kwargs)
    4. if response:
    5. return response 75.
    6. try:
    7. response = callback(request, *callback_args, callback_kwargs) ...
    8. except Exception, e:
    9. # If the view raised an exception, run it through exception
    10. # middleware, and if the exception middleware returns a
    11. # response, use that. Otherwise, reraise the exception.
    12. for middleware_method in self._exception_middleware:
    13. response = middleware_method(request, e)
    ▶ Local vars Variable Value callback <function _checklogin at 0x01D541F0> callback_args ('redirects', 'redirect') callback_kwargs {} debug <module 'django.views.debug' from 'D:\Python25\lib\site-packages\django\views\debug.pyc'> e ProgrammingError('operator does not exist: integer * unknown\nLINE 1: ...tsite"."id" WHERE ("django_redirectsite"."id" ILIKE \'1\' ...\n \nHINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.\n',) exceptions <module 'django.core.exceptions' from 'D:\Python25\lib\site-packages\django\core\exceptions.pyc'> mail_admins <function mail_admins at 0x012754B0> middleware_method <bound method XViewMiddleware.process_view of <django.middleware.doc.XViewMiddleware object at 0x0127B0D0>> request <WSGIRequest GET:<MultiValueDict: {}>, POST:<MultiValueDict: {'new_path': ['/me/'], 'site': ['1'], 'old_path': ['/you/']}>, COOKIES:{'sessionid': 'd1bb80140149ab061927952e4bc3d709'}, META:{'ALLUSERSPROFILE': 'C:
    Documents and Settings
    All Users', 'APPDATA': 'D:
    Documents and Settings
    Administrator
    Application Data', 'CLIENTNAME': 'Console', 'CLUSTERLOG': 'C:
    WINDOWS
    Cluster
    cluster.log', 'COMMONPROGRAMFILES': 'D:
    Program Files
    Common Files', 'COMPUTERNAME': 'USER', 'COMSPEC': 'C:
    windows
    system32
    cmd.exe', 'CONTENT_LENGTH': '43', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 'DJANGO_SETTINGS_MODULE': 'mysite.settings', 'FP_NO_HOST_CHECK': 'NO', 'GATEWAY_INTERFACE': 'CGI/1.1', 'GTK_BASEPATH': 'D:
    PROGRA~1
    PyGTK
    GTK', 'HOMEDRIVE': 'C:', 'HOMEPATH': '
    Documents and Settings
    Administrator', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'gb2312,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'zh-cn,zh;q=0.5', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': 'sessionid=d1bb80140149ab061927952e4bc3d709', 'HTTP_HOST': 'localhost:8000', 'HTTP_KEEP_ALIVE': '300', 'HTTP_REFERER': 'http://localhost:8000/admin/redirects/redirect/add/', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11', 'LANG': 'zh_CN', 'LOGONSERVER': '

    USER', 'NUMBER_OF_PROCESSORS': '1', 'OS': 'Windows_NT', 'PATH': 'C:
    windows
    system32;C:
    windows;C:
    windows
    System32
    Wbem;D:
    Python25;D:
    Program Files
    Common Files
    GTK
    2.0
    bin;D:
    Program Files
    Apache Software Foundation
    Apache2.2
    bin;D:
    Program Files
    PostgreSQL
    8.3-beta2
    bin
    ;D:
    Program Files
    PostgreSQL
    8.3-beta3
    bin
    ;D:
    Program Files
    PostgreSQL
    8.3
    bin
    ;D:
    PROGRA~1
    PyGTK
    GTK
    bin;D:
    Program Files
    StormII
    Codec;D:
    Program Files
    StormII', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH', 'PATH_INFO': '/admin/redirects/redirect/add/', 'PGLOCALEDIR': 'D:
    Program Files
    PostgreSQL
    8.3-beta2
    share
    locale', 'PROCESSOR_ARCHITECTURE': 'x86', 'PROCESSOR_IDENTIFIER': 'x86 Family 15 Model 3 Stepping 4, GenuineIntel', 'PROCESSOR_LEVEL': '15', 'PROCESSOR_REVISION': '0304', 'PROGRAMFILES': 'D:
    Program Files', 'PROMPT': '$P$G', 'PYTHONDOCS': 'D:
    Python25
    Doc', 'PYTHONPATH': 'E:
    python
    Django', 'QUERY_STRING': , 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_HOST': , 'REQUEST_METHOD': 'POST', 'RUN_MAIN': 'true', 'SCRIPT_NAME': , 'SERVER_NAME': 'USER', 'SERVER_PORT': '8000', 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE': 'WSGIServer/0.1 Python/2.5.1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:
    windows', 'TEMP': 'd:
    TEMP
    FileTemp', 'TMP': 'd:
    TEMP
    FileTemp', 'USERDOMAIN': 'USER', 'USERNAME': 'Administrator', 'USERPROFILE': 'C:
    Documents and Settings
    Administrator', 'WINDIR': 'C:
    windows', 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x009CF0B0>, 'wsgi.file_wrapper': <class 'django.core.servers.basehttp.FileWrapper'>, 'wsgi.input': <socket._fileobject object at 0x01D10BB0>, 'wsgi.multiprocess': False, 'wsgi.multithread': True, 'wsgi.run_once': False, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}> resolver <django.core.urlresolvers.RegexURLResolver object at 0x01CFBF70> response None self <django.core.handlers.wsgi.WSGIHandler object at 0x00ED2CF0> settings <django.conf.LazySettings object at 0x00AFFD90> urlconf 'mysite.urls' urlresolvers <module 'django.core.urlresolvers' from 'D:\Python25\lib\site-packages\django\core\urlresolvers.pyc'>
  • D:\Python25\Lib\site-packages\django\contrib\admin\views\decorators.py in _checklogin
    1. def _checklogin(request, *args, kwargs):
    2. if request.user.is_authenticated() and request.user.is_staff:
    3. # The user is valid. Continue to the admin page.
    4. if request.POST.has_key('post_data'):
    5. # User must have re-authenticated through a different window
    6. # or tab.
    7. request.POST = _decode_post_data(request.POSTpost_data)
    8. return view_func(request, *args, kwargs) ... 56.
    9. assert hasattr(request, 'session'), "The Django admin requires session middleware to be installed. Edit your MIDDLEWARE_CLASSES setting to insert 'django.contrib.sessions.middleware.SessionMiddleware'." 58.
    10. # If this isn't already the login page, display it.
    11. if not request.POST.has_key(LOGIN_FORM_KEY):
    12. if request.POST:
    ▶ Local vars Variable Value args ('redirects', 'redirect') kwargs {} request <WSGIRequest GET:<MultiValueDict: {}>, POST:<MultiValueDict: {'new_path': ['/me/'], 'site': ['1'], 'old_path': ['/you/']}>, COOKIES:{'sessionid': 'd1bb80140149ab061927952e4bc3d709'}, META:{'ALLUSERSPROFILE': 'C:
    Documents and Settings
    All Users', 'APPDATA': 'D:
    Documents and Settings
    Administrator
    Application Data', 'CLIENTNAME': 'Console', 'CLUSTERLOG': 'C:
    WINDOWS
    Cluster
    cluster.log', 'COMMONPROGRAMFILES': 'D:
    Program Files
    Common Files', 'COMPUTERNAME': 'USER', 'COMSPEC': 'C:
    windows
    system32
    cmd.exe', 'CONTENT_LENGTH': '43', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 'DJANGO_SETTINGS_MODULE': 'mysite.settings', 'FP_NO_HOST_CHECK': 'NO', 'GATEWAY_INTERFACE': 'CGI/1.1', 'GTK_BASEPATH': 'D:
    PROGRA~1
    PyGTK
    GTK', 'HOMEDRIVE': 'C:', 'HOMEPATH': '
    Documents and Settings
    Administrator', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'gb2312,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'zh-cn,zh;q=0.5', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': 'sessionid=d1bb80140149ab061927952e4bc3d709', 'HTTP_HOST': 'localhost:8000', 'HTTP_KEEP_ALIVE': '300', 'HTTP_REFERER': 'http://localhost:8000/admin/redirects/redirect/add/', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11', 'LANG': 'zh_CN', 'LOGONSERVER': '

    USER', 'NUMBER_OF_PROCESSORS': '1', 'OS': 'Windows_NT', 'PATH': 'C:
    windows
    system32;C:
    windows;C:
    windows
    System32
    Wbem;D:
    Python25;D:
    Program Files
    Common Files
    GTK
    2.0
    bin;D:
    Program Files
    Apache Software Foundation
    Apache2.2
    bin;D:
    Program Files
    PostgreSQL
    8.3-beta2
    bin
    ;D:
    Program Files
    PostgreSQL
    8.3-beta3
    bin
    ;D:
    Program Files
    PostgreSQL
    8.3
    bin
    ;D:
    PROGRA~1
    PyGTK
    GTK
    bin;D:
    Program Files
    StormII
    Codec;D:
    Program Files
    StormII', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH', 'PATH_INFO': '/admin/redirects/redirect/add/', 'PGLOCALEDIR': 'D:
    Program Files
    PostgreSQL
    8.3-beta2
    share
    locale', 'PROCESSOR_ARCHITECTURE': 'x86', 'PROCESSOR_IDENTIFIER': 'x86 Family 15 Model 3 Stepping 4, GenuineIntel', 'PROCESSOR_LEVEL': '15', 'PROCESSOR_REVISION': '0304', 'PROGRAMFILES': 'D:
    Program Files', 'PROMPT': '$P$G', 'PYTHONDOCS': 'D:
    Python25
    Doc', 'PYTHONPATH': 'E:
    python
    Django', 'QUERY_STRING': , 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_HOST': , 'REQUEST_METHOD': 'POST', 'RUN_MAIN': 'true', 'SCRIPT_NAME': , 'SERVER_NAME': 'USER', 'SERVER_PORT': '8000', 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE': 'WSGIServer/0.1 Python/2.5.1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:
    windows', 'TEMP': 'd:
    TEMP
    FileTemp', 'TMP': 'd:
    TEMP
    FileTemp', 'USERDOMAIN': 'USER', 'USERNAME': 'Administrator', 'USERPROFILE': 'C:
    Documents and Settings
    Administrator', 'WINDIR': 'C:
    windows', 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x009CF0B0>, 'wsgi.file_wrapper': <class 'django.core.servers.basehttp.FileWrapper'>, 'wsgi.input': <socket._fileobject object at 0x01D10BB0>, 'wsgi.multiprocess': False, 'wsgi.multithread': True, 'wsgi.run_once': False, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}> view_func <function _wrapped_view_func at 0x01D541B0>
  • D:\Python25\Lib\site-packages\django\views\decorators\cache.py in _wrapped_view_func

32.

  1. def never_cache(view_func):
  2. """
  3. Decorator that adds headers to a response so that it will
  4. never be cached.
  5. """
  6. def _wrapped_view_func(request, *args, kwargs):
  7. response = view_func(request, *args, kwargs) ...
  8. add_never_cache_headers(response)
  9. return response
  10. return _wrapped_view_func

▶ Local vars
Variable Value
args
('redirects', 'redirect')
kwargs
{}
request
<WSGIRequest GET:<MultiValueDict: {}>, POST:<MultiValueDict: {'new_path': ['/me/'], 'site': ['1'], 'old_path': ['/you/']}>, COOKIES:{'sessionid': 'd1bb80140149ab061927952e4bc3d709'}, META:{'ALLUSERSPROFILE': 'C:
Documents and Settings
All Users', 'APPDATA': 'D:
Documents and Settings
Administrator
Application Data', 'CLIENTNAME': 'Console', 'CLUSTERLOG': 'C:
WINDOWS
Cluster
cluster.log', 'COMMONPROGRAMFILES': 'D:
Program Files
Common Files', 'COMPUTERNAME': 'USER', 'COMSPEC': 'C:
windows
system32
cmd.exe', 'CONTENT_LENGTH': '43', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 'DJANGO_SETTINGS_MODULE': 'mysite.settings', 'FP_NO_HOST_CHECK': 'NO', 'GATEWAY_INTERFACE': 'CGI/1.1', 'GTK_BASEPATH': 'D:
PROGRA~1
PyGTK
GTK', 'HOMEDRIVE': 'C:', 'HOMEPATH': '
Documents and Settings
Administrator', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'gb2312,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'zh-cn,zh;q=0.5', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': 'sessionid=d1bb80140149ab061927952e4bc3d709', 'HTTP_HOST': 'localhost:8000', 'HTTP_KEEP_ALIVE': '300', 'HTTP_REFERER': 'http://localhost:8000/admin/redirects/redirect/add/', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11', 'LANG': 'zh_CN', 'LOGONSERVER': '

USER', 'NUMBER_OF_PROCESSORS': '1', 'OS': 'Windows_NT', 'PATH': 'C:
windows
system32;C:
windows;C:
windows
System32
Wbem;D:
Python25;D:
Program Files
Common Files
GTK
2.0
bin;D:
Program Files
Apache Software Foundation
Apache2.2
bin;D:
Program Files
PostgreSQL
8.3-beta2
bin
;D:
Program Files
PostgreSQL
8.3-beta3
bin
;D:
Program Files
PostgreSQL
8.3
bin
;D:
PROGRA~1
PyGTK
GTK
bin;D:
Program Files
StormII
Codec;D:
Program Files
StormII', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH', 'PATH_INFO': '/admin/redirects/redirect/add/', 'PGLOCALEDIR': 'D:
Program Files
PostgreSQL
8.3-beta2
share
locale', 'PROCESSOR_ARCHITECTURE': 'x86', 'PROCESSOR_IDENTIFIER': 'x86 Family 15 Model 3 Stepping 4, GenuineIntel', 'PROCESSOR_LEVEL': '15', 'PROCESSOR_REVISION': '0304', 'PROGRAMFILES': 'D:
Program Files', 'PROMPT': '$P$G', 'PYTHONDOCS': 'D:
Python25
Doc', 'PYTHONPATH': 'E:
python
Django', 'QUERY_STRING': , 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_HOST': , 'REQUEST_METHOD': 'POST', 'RUN_MAIN': 'true', 'SCRIPT_NAME': , 'SERVER_NAME': 'USER', 'SERVER_PORT': '8000', 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE': 'WSGIServer/0.1 Python/2.5.1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:
windows', 'TEMP': 'd:
TEMP
FileTemp', 'TMP': 'd:
TEMP
FileTemp', 'USERDOMAIN': 'USER', 'USERNAME': 'Administrator', 'USERPROFILE': 'C:
Documents and Settings
Administrator', 'WINDIR': 'C:
windows', 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x009CF0B0>, 'wsgi.file_wrapper': <class 'django.core.servers.basehttp.FileWrapper'>, 'wsgi.input': <socket._fileobject object at 0x01D10BB0>, 'wsgi.multiprocess': False, 'wsgi.multithread': True, 'wsgi.run_once': False, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}>
view_func
<function add_stage at 0x01D54170>

  • D:\Python25\Lib\site-packages\django\contrib\admin\views\main.py in add_stage
    1. manipulator = model.AddManipulator()
    2. if request.POST:
    3. new_data = request.POST.copy() 246.
    4. if opts.has_field_type(models.FileField):
    5. new_data.update(request.FILES)

249.

  1. errors = manipulator.get_validation_errors(new_data) ...
  2. manipulator.do_html2python(new_data) 252.
  3. if not errors:
  4. new_object = manipulator.save(new_data)
  5. pk_value = new_object._get_pk_val()
  6. LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, pk_value, str(new_object), ADDITION)

▶ Local vars
Variable Value
app_label
'redirects'
form_url

manipulator
<django.db.models.manipulators.AddManipulator object at 0x01D56150>
model
<class 'django.contrib.redirects.models.Redirect'>
model_name
'redirect'
new_data
<MultiValueDict: {'new_path': ['/me/'], 'site': ['1'], 'old_path': ['/you/']}>
object_id_override
None
opts
<Options for Redirect>
post_url
'../'
post_url_continue
'../%s/'
request
<WSGIRequest GET:<MultiValueDict: {}>, POST:<MultiValueDict: {'new_path': ['/me/'], 'site': ['1'], 'old_path': ['/you/']}>, COOKIES:{'sessionid': 'd1bb80140149ab061927952e4bc3d709'}, META:{'ALLUSERSPROFILE': 'C:
Documents and Settings
All Users', 'APPDATA': 'D:
Documents and Settings
Administrator
Application Data', 'CLIENTNAME': 'Console', 'CLUSTERLOG': 'C:
WINDOWS
Cluster
cluster.log', 'COMMONPROGRAMFILES': 'D:
Program Files
Common Files', 'COMPUTERNAME': 'USER', 'COMSPEC': 'C:
windows
system32
cmd.exe', 'CONTENT_LENGTH': '43', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 'DJANGO_SETTINGS_MODULE': 'mysite.settings', 'FP_NO_HOST_CHECK': 'NO', 'GATEWAY_INTERFACE': 'CGI/1.1', 'GTK_BASEPATH': 'D:
PROGRA~1
PyGTK
GTK', 'HOMEDRIVE': 'C:', 'HOMEPATH': '
Documents and Settings
Administrator', 'HTTP_ACCEPT': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'gb2312,utf-8;q=0.7,*;q=0.7', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate', 'HTTP_ACCEPT_LANGUAGE': 'zh-cn,zh;q=0.5', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_COOKIE': 'sessionid=d1bb80140149ab061927952e4bc3d709', 'HTTP_HOST': 'localhost:8000', 'HTTP_KEEP_ALIVE': '300', 'HTTP_REFERER': 'http://localhost:8000/admin/redirects/redirect/add/', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11', 'LANG': 'zh_CN', 'LOGONSERVER': '

USER', 'NUMBER_OF_PROCESSORS': '1', 'OS': 'Windows_NT', 'PATH': 'C:
windows
system32;C:
windows;C:
windows
System32
Wbem;D:
Python25;D:
Program Files
Common Files
GTK
2.0
bin;D:
Program Files
Apache Software Foundation
Apache2.2
bin;D:
Program Files
PostgreSQL
8.3-beta2
bin
;D:
Program Files
PostgreSQL
8.3-beta3
bin
;D:
Program Files
PostgreSQL
8.3
bin
;D:
PROGRA~1
PyGTK
GTK
bin;D:
Program Files
StormII
Codec;D:
Program Files
StormII', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH', 'PATH_INFO': '/admin/redirects/redirect/add/', 'PGLOCALEDIR': 'D:
Program Files
PostgreSQL
8.3-beta2
share
locale', 'PROCESSOR_ARCHITECTURE': 'x86', 'PROCESSOR_IDENTIFIER': 'x86 Family 15 Model 3 Stepping 4, GenuineIntel', 'PROCESSOR_LEVEL': '15', 'PROCESSOR_REVISION': '0304', 'PROGRAMFILES': 'D:
Program Files', 'PROMPT': '$P$G', 'PYTHONDOCS': 'D:
Python25
Doc', 'PYTHONPATH': 'E:
python
Django', 'QUERY_STRING':
, 'REMOTE_ADDR': '127.0.0.1', 'REMOTE_HOST': , 'REQUEST_METHOD': 'POST', 'RUN_MAIN': 'true', 'SCRIPT_NAME': , 'SERVER_NAME': 'USER', 'SERVER_PORT': '8000', 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE': 'WSGIServer/0.1 Python/2.5.1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:
windows', 'TEMP': 'd:
TEMP
FileTemp', 'TMP': 'd:
TEMP
FileTemp', 'USERDOMAIN': 'USER', 'USERNAME': 'Administrator', 'USERPROFILE': 'C:
Documents and Settings
Administrator', 'WINDIR': 'C:
windows', 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x009CF0B0>, 'wsgi.file_wrapper': <class 'django.core.servers.basehttp.FileWrapper'>, 'wsgi.input': <socket._fileobject object at 0x01D10BB0>, 'wsgi.multiprocess': False, 'wsgi.multithread': True, 'wsgi.run_once': False, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}>
show_delete
False

  • D:\Python25\Lib\site-packages\django\oldforms\init.py in get_validation_errors
    1. field.prepare(new_data) 53.
    2. def get_validation_errors(self, new_data):
    3. "Returns dictionary mapping field_names to error-message lists"
    4. errors = {}
    5. self.prepare(new_data)
    6. for field in self.fields:
    7. errors.update(field.get_validation_errors(new_data)) ...
    8. val_name = 'validate_%s' % field.field_name
    9. if hasattr(self, val_name):
    10. val = getattr(self, val_name)
    11. try:
    12. field.run_validator(new_data, val)
    13. except (validators.ValidationError, validators.CriticalValidationError), e:
    ▶ Local vars Variable Value errors {} field FormField "site" new_data <MultiValueDict: {'new_path': ['/me/'], 'site': ['1'], 'old_path': ['/you/']}> self <django.db.models.manipulators.AddManipulator object at 0x01D56150>
  • D:\Python25\Lib\site-packages\django\oldforms\init.py in get_validation_errors
    1. errors = {}
    2. if self.is_required and not new_data.get(self.field_name, False):
    3. errors.setdefault(self.field_name, []).append(gettext('This field is required.'))
    4. return errors
    5. try:
    6. for validator in self.validator_list:
    7. try:
    8. self.run_validator(new_data, validator) ...
    9. except validators.ValidationError, e:
    10. errors.setdefault(self.field_name, []).extend(e.messages)
    11. # If a CriticalValidationError is raised, ignore any other ValidationErrors
    12. # for this particular field
    13. except validators.CriticalValidationError, e:
    14. errors.setdefault(self.field_name, []).extend(e.messages)
    ▶ Local vars Variable Value errors {} new_data <MultiValueDict: {'new_path': ['/me/'], 'site': ['1'], 'old_path': ['/you/']}> self FormField "site" validator <bound method AddManipulator._curried of <django.db.models.manipulators.AddManipulator object at 0x01D56150>>
  • D:\Python25\Lib\site-packages\django\oldforms\init.py in run_validator

345.
346.

  1. def run_validator(self, new_data, validator):
  2. if self.is_required or new_data.get(self.field_name, False) or hasattr(validator, 'always_test'):
  3. if hasattr(self, 'requires_data_list'):
  4. validator(new_data.getlist(self.field_name), new_data)
  5. else:
  6. validator(new_data.get(self.field_name, ), new_data) ... 353.
  7. def get_validation_errors(self, new_data):
  8. errors = {}
  9. if self.is_required and not new_data.get(self.field_name, False):
  10. errors.setdefault(self.field_name, []).append(gettext('This field is required.'))
  11. return errors

▶ Local vars
Variable Value
new_data
<MultiValueDict: {'new_path': ['/me/'], 'site': ['1'], 'old_path': ['/you/']}>
self
FormField "site"
validator
<bound method AddManipulator._curried of <django.db.models.manipulators.AddManipulator object at 0x01D56150>>

  • D:\Python25\Lib\site-packages\django\db\models\manipulators.py in manipulator_validator_unique_together
    1. # doesn't have blank=True.
    2. return
    3. if isinstance(f.rel, ManyToOneRel):
    4. kwargs% f.name = field_val
    5. else:
    6. kwargs% f.name = field_val
    7. try:
    8. old_obj = self.manager.get(kwargs) ...
    9. except ObjectDoesNotExist:
    10. return
    11. if hasattr(self, 'original_object') and self.original_object._get_pk_val() == old_obj._get_pk_val():
    12. pass
    13. else:
    14. raise validators.ValidationError, _("%(object)s with this %(type)s already exists for the given %(field)s.") % \
    ▶ Local vars Variable Value ManyToOneRel <class 'django.db.models.fields.related.ManyToOneRel'> all_data <MultiValueDict: {'new_path': ['/me/'], 'site': ['1'], 'old_path': ['/you/']}> f <django.db.models.fields.CharField object at 0x011C8FB0> field_data '1' field_list [<django.db.models.fields.related.ForeignKey object at 0x011C8F30>, <django.db.models.fields.CharField object at 0x011C8FB0>] field_name 'old_path' field_name_list ('site', 'old_path') field_val '/you/' get_text_list <function get_text_list at 0x00F7C2B0> kwargs {'old_pathiexact': '/you/', 'siteidiexact': '1'} opts <Options for Redirect> self <django.db.models.manipulators.AddManipulator object at 0x01D56150>
  • D:\Python25\Lib\site-packages\django\db\models\manager.py in get
    1. def distinct(self, *args, kwargs):
    2. return self.get_query_set().distinct(*args, kwargs) 68.
    3. def extra(self, *args, kwargs):
    4. return self.get_query_set().extra(*args, kwargs) 71.
    5. def get(self, *args, kwargs):
    6. return self.get_query_set().get(*args, kwargs) ... 74.
    7. def get_or_create(self, kwargs):
    8. return self.get_query_set().get_or_create(kwargs) 77.
    9. def create(self, kwargs):
    10. return self.get_query_set().create(kwargs)
    ▶ Local vars Variable Value args () kwargs {'old_pathiexact': '/you/', 'siteidiexact': '1'} self <django.db.models.manager.Manager object at 0x011DABF0>
  • D:\Python25\Lib\site-packages\django\db\models\query.py in get

243.

  1. def get(self, *args, kwargs):
  2. "Performs the SELECT and returns a single object matching the given keyword arguments."
  3. clone = self.filter(*args, kwargs)
  4. # clean up SQL by removing unneeded ORDER BY
  5. if not clone._order_by:
  6. clone._order_by = ()
  7. obj_list = list(clone) ...
  8. if len(obj_list) < 1:
  9. raise self.model.DoesNotExist, "%s matching query does not exist." % self.model._meta.object_name
  10. assert len(obj_list) == 1, "get() returned more than one %s -- it returned %s! Lookup parameters were %s" % (self.model._meta.object_name, len(obj_list), kwargs)
  11. return obj_list[0] 255.
  12. def create(self, kwargs):

▶ Local vars
Variable Value
args
()
clone
Error in formatting:current transaction is aborted, commands ignored until end of transaction block
kwargs
{'old_pathiexact': '/you/', 'siteidiexact': '1'}
self
Error in formatting:current transaction is aborted, commands ignored until end of transaction block

  • D:\Python25\Lib\site-packages\django\db\models\query.py in iter
    1. def repr(self):
    2. return repr(self._get_data()) 103.
    3. def len(self):
    4. return len(self._get_data()) 106.
    5. def iter(self):
    6. return iter(self._get_data()) ... 109.
    7. def getitem(self, k):
    8. "Retrieve an item or slice from the set of results."
    9. if not isinstance(k, (slice, int)):
    10. raise TypeError
    11. assert (not isinstance(k, slice) and (k >= 0)) \
    ▶ Local vars Variable Value self Error in formatting:current transaction is aborted, commands ignored until end of transaction block
  • D:\Python25\Lib\site-packages\django\db\models\query.py in _get_data
    1. if (self._order_by is not None and len(self._order_by) > 0) and \
    2. (combined._order_by is None or len(combined._order_by) == 0):
    3. combined._order_by = self._order_by
    4. return combined 467.
    5. def _get_data(self):
    6. if self._result_cache is None:
    7. self._result_cache = list(self.iterator()) ...
    8. return self._result_cache 472.
    9. def _get_sql_clause(self):
    10. opts = self.model._meta 475.
    11. # Construct the fundamental parts of the query: SELECT X FROM Y WHERE Z.
    ▶ Local vars Variable Value self Error in formatting:current transaction is aborted, commands ignored until end of transaction block
  • D:\Python25\Lib\site-packages\django\db\models\query.py in iterator
    1. raise StopIteration 177.
    2. # self._select is a dictionary, and dictionaries' key order is
    3. # undefined, so we convert it to a list of tuples.
    4. extra_select = self._select.items() 181.
    5. cursor = connection.cursor()
    6. cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params) ...
    7. fill_cache = self._select_related
    8. index_end = len(self.model._meta.fields)
    9. while 1:
    10. rows = cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)
    11. if not rows:
    12. raise StopIteration
    ▶ Local vars Variable Value cursor <django.db.backends.util.CursorDebugWrapper object at 0x01D813F0> extra_select [] params ['1', '/you/'] select ['"django_redirect"."id"', '"django_redirect"."site_id"', '"django_redirect"."old_path"', '"django_redirect"."new_path"'] self Error in formatting:current transaction is aborted, commands ignored until end of transaction block sql ' FROM "django_redirect" INNER JOIN "django_site" AS "django_redirectsite" ON "django_redirect"."site_id" = "django_redirectsite"."id" WHERE ("django_redirectsite"."id" ILIKE %s AND "django_redirect"."old_path" ILIKE %s)'
  • D:\Python25\Lib\site-packages\django\db\backends\util.py in execute
    1. def init(self, cursor, db):
    2. self.cursor = cursor
    3. self.db = db 8.
    4. def execute(self, sql, params=()):
  1. start = time()
  2. try:
  3. return self.cursor.execute(sql, params) ...
  4. finally:
  5. stop = time()
  6. # If params was a list, convert it to a tuple, because string
  7. # formatting with '%' only works with tuples or dicts.
  8. if not isinstance(params, (tuple, dict)):
  9. params = tuple(params)

▶ Local vars
Variable Value
params
('1', '/you/')
self
<django.db.backends.util.CursorDebugWrapper object at 0x01D813F0>
sql
'SELECT "django_redirect"."id","django_redirect"."site_id","django_redirect"."old_path","django_redirect"."new_path" FROM "django_redirect" INNER JOIN "django_site" AS "django_redirectsite" ON "django_redirect"."site_id" = "django_redirectsite"."id" WHERE ("django_redirectsite"."id" ILIKE %s AND "django_redirect"."old_path" ILIKE %s)'
start
1197611452.984
stop
1197611452.984

Traceback (most recent call last):
File "D:\Python25\Lib\site-packages\django\core\handlers\base.py" in get_response

  1. response = callback(request, *callback_args, callback_kwargs)

File "D:\Python25\Lib\site-packages\django\contrib\admin\views\decorators.py" in _checklogin

  1. return view_func(request, *args, kwargs)

File "D:\Python25\Lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func

  1. response = view_func(request, *args, kwargs)

File "D:\Python25\Lib\site-packages\django\contrib\admin\views\main.py" in add_stage

  1. errors = manipulator.get_validation_errors(new_data)

File "D:\Python25\Lib\site-packages\django\oldforms\init.py" in get_validation_errors

  1. errors.update(field.get_validation_errors(new_data))

File "D:\Python25\Lib\site-packages\django\oldforms\init.py" in get_validation_errors

  1. self.run_validator(new_data, validator)

File "D:\Python25\Lib\site-packages\django\oldforms\init.py" in run_validator

  1. validator(new_data.get(self.field_name, ), new_data)

File "D:\Python25\Lib\site-packages\django\db\models\manipulators.py" in manipulator_validator_unique_together

  1. old_obj = self.manager.get(kwargs)

File "D:\Python25\Lib\site-packages\django\db\models\manager.py" in get

  1. return self.get_query_set().get(*args, kwargs)

File "D:\Python25\Lib\site-packages\django\db\models\query.py" in get

  1. obj_list = list(clone)

File "D:\Python25\Lib\site-packages\django\db\models\query.py" in iter

  1. return iter(self._get_data())

File "D:\Python25\Lib\site-packages\django\db\models\query.py" in _get_data

  1. self._result_cache = list(self.iterator())

File "D:\Python25\Lib\site-packages\django\db\models\query.py" in iterator

  1. cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params)

File "D:\Python25\Lib\site-packages\django\db\backends\util.py" in execute

  1. return self.cursor.execute(sql, params)

ProgrammingError at /admin/redirects/redirect/add/
operator does not exist: integer * unknown LINE 1: ...tsite"."id" WHERE ("django_redirectsite"."id" ILIKE '1' ... HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.

Request information
GET

No GET data
POST
Variable Value
new_path
'/me/'
site
'1'
old_path
'/you/'
COOKIES
Variable Value
sessionid
'd1bb80140149ab061927952e4bc3d709'
META
Variable Value
ALLUSERSPROFILE
'C:
Documents and Settings
All Users'
APPDATA
'D:
Documents and Settings
Administrator
Application Data'
CLIENTNAME
'Console'
CLUSTERLOG
'C:
WINDOWS
Cluster
cluster.log'
COMMONPROGRAMFILES
'D:
Program Files
Common Files'
COMPUTERNAME
'USER'
COMSPEC
'C:
windows
system32
cmd.exe'
CONTENT_LENGTH
'43'
CONTENT_TYPE
'application/x-www-form-urlencoded'
DJANGO_SETTINGS_MODULE
'mysite.settings'
FP_NO_HOST_CHECK
'NO'
GATEWAY_INTERFACE
'CGI/1.1'
GTK_BASEPATH
'D:
PROGRA~1
PyGTK
GTK'
HOMEDRIVE
'C:'
HOMEPATH
'
Documents and Settings
Administrator'
HTTP_ACCEPT
'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'
HTTP_ACCEPT_CHARSET
'gb2312,utf-8;q=0.7,*;q=0.7'
HTTP_ACCEPT_ENCODING
'gzip,deflate'
HTTP_ACCEPT_LANGUAGE
'zh-cn,zh;q=0.5'
HTTP_CONNECTION
'keep-alive'
HTTP_COOKIE
'sessionid=d1bb80140149ab061927952e4bc3d709'
HTTP_HOST
'localhost:8000'
HTTP_KEEP_ALIVE
'300'
HTTP_REFERER
'http://localhost:8000/admin/redirects/redirect/add/'
HTTP_USER_AGENT
'Mozilla/5.0 (Windows; U; Windows NT 5.2; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11'
LANG
'zh_CN'
LOGONSERVER
'

USER'
NUMBER_OF_PROCESSORS
'1'
OS
'Windows_NT'
PATH
'C:
windows
system32;C:
windows;C:
windows
System32
Wbem;D:
Python25;D:
Program Files
Common Files
GTK
2.0
bin;D:
Program Files
Apache Software Foundation
Apache2.2
bin;D:
Program Files
PostgreSQL
8.3-beta2
bin
;D:
Program Files
PostgreSQL
8.3-beta3
bin
;D:
Program Files
PostgreSQL
8.3
bin
;D:
PROGRA~1
PyGTK
GTK
bin;D:
Program Files
StormII
Codec;D:
Program Files
StormII'
PATHEXT
'.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH'
PATH_INFO
'/admin/redirects/redirect/add/'
PGLOCALEDIR
'D:
Program Files
PostgreSQL
8.3-beta2
share
locale'
PROCESSOR_ARCHITECTURE
'x86'
PROCESSOR_IDENTIFIER
'x86 Family 15 Model 3 Stepping 4, GenuineIntel'
PROCESSOR_LEVEL
'15'
PROCESSOR_REVISION
'0304'
PROGRAMFILES
'D:
Program Files'
PROMPT
'$P$G'
PYTHONDOCS
'D:
Python25
Doc'
PYTHONPATH
'E:
python
Django'
QUERY_STRING

REMOTE_ADDR
'127.0.0.1'
REMOTE_HOST

REQUEST_METHOD
'POST'
RUN_MAIN
'true'
SCRIPT_NAME

SERVER_NAME
'USER'
SERVER_PORT
'8000'
SERVER_PROTOCOL
'HTTP/1.1'
SERVER_SOFTWARE
'WSGIServer/0.1 Python/2.5.1'
SESSIONNAME
'Console'
SYSTEMDRIVE
'C:'
SYSTEMROOT
'C:
windows'
TEMP
'd:
TEMP
FileTemp'
TMP
'd:
TEMP
FileTemp'
USERDOMAIN
'USER'
USERNAME
'Administrator'
USERPROFILE
'C:
Documents and Settings
Administrator'
WINDIR
'C:
windows'
wsgi.errors
<open file '<stderr>', mode 'w' at 0x009CF0B0>
wsgi.file_wrapper
<class 'django.core.servers.basehttp.FileWrapper'>
wsgi.input
<socket._fileobject object at 0x01D10BB0>
wsgi.multiprocess
False
wsgi.multithread
True
wsgi.run_once
False
wsgi.url_scheme
'http'
wsgi.version
(1, 0)
Settings
Using settings module mysite.settings
Setting Value
ABSOLUTE_URL_OVERRIDES
{}
ADMINS
()
ADMIN_FOR
()
ADMIN_MEDIA_PREFIX
'/media/'
ALLOWED_INCLUDE_ROOTS
()
APPEND_SLASH
True
AUTHENTICATION_BACKENDS
('django.contrib.auth.backends.ModelBackend',)
AUTH_PROFILE_MODULE
'userreg.models.MySiteProfile'
BANNED_IPS
()
CACHE_BACKEND
'simple://'
CACHE_MIDDLEWARE_KEY_PREFIX

CACHE_MIDDLEWARE_SECONDS
120
COMMENTS_ALLOW_PROFANITIES
False
COMMENTS_BANNED_USERS_GROUP
None
COMMENTS_FIRST_FEW
0
COMMENTS_MODERATORS_GROUP
None
COMMENTS_SKETCHY_USERS_GROUP
None
DATABASE_ENGINE
'postgresql_psycopg2'
DATABASE_HOST

DATABASE_NAME
'mysite'
DATABASE_OPTIONS
{}
DATABASE_PASSWORD
''
DATABASE_PORT

DATABASE_USER
'postgres'
DATETIME_FORMAT
'N j, Y, P'
DATE_FORMAT
'N j, Y'
DEBUG
True
DEFAULT_CHARSET
'utf-8'
DEFAULT_CONTENT_TYPE
'text/html'
DEFAULT_FROM_EMAIL
'webmaster@localhost'
DISALLOWED_USER_AGENTS
()
EMAIL_HOST
'smtp.163.com'
EMAIL_HOST_PASSWORD
''
EMAIL_HOST_USER

EMAIL_PORT
25
EMAIL_SUBJECT_PREFIX
'[Django] '
FIXTURE_DIRS
()
IGNORABLE_404_ENDS
('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')
IGNORABLE_404_STARTS
('/cgi-bin/', '/_vti_bin', '/_vti_inf')
INSTALLED_APPS
['userreg', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'django.contrib.flatpages', 'django.contrib.redirects', 'mysite.books', 'temp', 'extend', 'django.contrib.sitemaps', 'frame']
INTERNAL_IPS
()
JING_PATH
'/usr/bin/jing'
LANGUAGES
(('ar', 'Arabic'), ('bn', 'Bengali'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('el', 'Greek'), ('en', 'English'), ('es', 'Spanish'), ('es_AR', 'Argentinean Spanish'), ('fi', 'Finnish'), ('fr', 'French'), ('gl', 'Galician'), ('hu', 'Hungarian'), ('he', 'Hebrew'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('kn', 'Kannada'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('nl', 'Dutch'), ('no', 'Norwegian'), ('pl', 'Polish'), ('pt', 'Portugese'), ('pt-br', 'Brazilian'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sr', 'Serbian'), ('sv', 'Swedish'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tr', 'Turkish'), ('uk', 'Ukrainian'), ('zh-cn', 'Simplified Chinese'), ('zh-tw', 'Traditional Chinese'))
LANGUAGES_BIDI
('he', 'ar')
LANGUAGE_CODE
'en-us'
MANAGERS
()
MEDIA_ROOT
'E:
python
Django
mysite
userfiles'
MEDIA_URL
'/dynamic/'
MIDDLEWARE_CLASSES
('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.middleware.doc.XViewMiddleware', 'django.middleware.cache.CacheMiddleware', 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', 'django.contrib.redirects.middleware.RedirectFallbackMiddleware')
MONTH_DAY_FORMAT
'F j'
PREPEND_WWW
False
PROFANITIES_LIST
''
ROOT_URLCONF
'mysite.urls'
SECRET_KEY
''
SEND_BROKEN_LINK_EMAILS
False
SERVER_EMAIL
'root@localhost'
SESSION_COOKIE_AGE
1209600
SESSION_COOKIE_DOMAIN
None
SESSION_COOKIE_NAME
'sessionid'
SESSION_COOKIE_SECURE
False
SESSION_EXPIRE_AT_BROWSER_CLOSE
True
SESSION_SAVE_EVERY_REQUEST
False
SETTINGS_MODULE
'mysite.settings'
SITE_ID
1
STATIC_DIR
'E:
python
Django
mysite
static'
TEMPLATE_CONTEXT_PROCESSORS
('django.core.context_processors.auth', 'django.core.context_processors.debug', 'django.core.context_processors.i18n')
TEMPLATE_DEBUG
True
TEMPLATE_DIRS
('E:
python
Django
mysite
templates',)
TEMPLATE_LOADERS
('django.template.loaders.filesystem.load_template_source', 'django.template.loaders.app_directories.load_template_source')
TEMPLATE_STRING_IF_INVALID

TEST_DATABASE_NAME
None
TEST_RUNNER
'django.test.simple.run_tests'
TIME_FORMAT
'P'
TIME_ZONE
'America/Chicago'
TRANSACTIONS_MANAGED
False
URL_VALIDATOR_USER_AGENT
'Django/0.96.1 (http://www.djangoproject.com)'
USE_ETAGS
False
USE_I18N
True
YEAR_MONTH_FORMAT
'F Y'

You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 500 page.

Change History (2)

comment:1 by Brian Rosner, 16 years ago

Resolution: invalid
Status: newclosed

Please don't just paste a full traceback to a bug report like you did. I am closing this as invalid as you provided no information on why this error is occuring. Please direct question about Django's usage to the django-users mailing list or #django on freenode. Please create a new ticket with a proper bug submission.

comment:2 by bp@…, 16 years ago

I just ran into an error that looks a lot like above, using
PostgreSQL 8.3beta2 and the postgresql_psycopg2 engine.

Ticket #1751 ,"unique_together does not work when any
of the listed fields contains a FK" seems to have been
the cause.

I was previously using SQLite, and that didn't have a problem
with a foreign key field being in a 'unique_together' Meta clause.

Note: See TracTickets for help on using tickets.
Back to Top