#168 closed defect (fixed)
history() in django/views/admin/main.py makes assumptions about the object's key name
| Reported by: | Owned by: | Adrian Holovaty | |
|---|---|---|---|
| Component: | contrib.admin | Version: | |
| Severity: | major | Keywords: | history |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
Normally the ID of an object is "id", except in cases like mine where I'd redefined the key to be something like list:
"meta.AutoField('item_id','Item ID',primary_key=True,unique=True),"
When pulling up the history of a record in the administrative interface, the function history() in django/views/admin/main.py is called and an assumption is made on line 1080:
"obj = mod.get_object(id__exact=object_id)"
In my case, I believe that it should be (it cannot be hardcoded like this, obviously this needs to be dynamic):
"obj = mod.get_object(item_id__exact=object_id)"
Here's the exact text of the traceback I get:
There's been an error:
Traceback (most recent call last):
File "/usr/local/lib/python2.4/site-packages/django/core/handlers/wsgi.py", line 190, in get_response
return callback(request, **param_dict)
File "/usr/local/lib/python2.4/site-packages/django/views/admin/main.py", line 1080, in history
obj = mod.get_object(id__exact=object_id)
File "/usr/local/lib/python2.4/site-packages/django/core/meta.py", line 87, in _curried
return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.items()))
File "/usr/local/lib/python2.4/site-packages/django/core/meta.py", line 1035, in function_get_object
obj_list = function_get_list(opts, klass, **kwargs)
File "/usr/local/lib/python2.4/site-packages/django/core/meta.py", line 1057, in function_get_list
select, sql, params = function_get_sql_clause(opts, **kwargs)
File "/usr/local/lib/python2.4/site-packages/django/core/meta.py", line 1235, in function_get_sql_clause
tables2, join_where2, where2, params2, _ = _parse_lookup(kwargs.items(), opts)
File "/usr/local/lib/python2.4/site-packages/django/core/meta.py", line 1224, in _parse_lookup
_throw_bad_kwarg_error(kwarg)
File "/usr/local/lib/python2.4/site-packages/django/core/meta.py", line 1126, in _throw_bad_kwarg_error
raise TypeError, "got unexpected keyword argument '%s'" % kwarg
TypeError: got unexpected keyword argument 'id__exact'
Change History (5)
comment:1 by , 20 years ago
comment:2 by , 20 years ago
--- main.py Fri Jul 22 23:47:51 2005
+++ main-old.py Fri Jul 22 23:47:34 2005
@@ -1077,7 +1077,7 @@
order_by=("action_time",), select_related=True)
# If no history was found, see whether this object even exists.
try:
- obj = mod.get_object(**{'%s__exact' % opts.pk.name: object_id})
+ obj = mod.get_object(id__exact=object_id)
except ObjectDoesNotExist:
raise Http404
t = template_loader.get_template('admin_object_history')
comment:3 by , 20 years ago
Sorry that was backwards:
--- main-old.py Fri Jul 22 23:47:34 2005
+++ main.py Fri Jul 22 23:47:51 2005
@@ -1077,7 +1077,7 @@
order_by=("action_time",), select_related=True)
# If no history was found, see whether this object even exists.
try:
- obj = mod.get_object(id__exact=object_id)
+ obj = mod.get_object(**{'%s__exact' % opts.pk.name: object_id})
except ObjectDoesNotExist:
raise Http404
t = template_loader.get_template('admin_object_history')
comment:4 by , 20 years ago
Alternately, if the patch in #163 for providing a "pk=(value)" syntax is accepted, the following patch should also solve the bug:
Index: django/views/admin/main.py
===================================================================
--- django/views/admin/main.py (revision 300)
+++ django/views/admin/main.py (working copy)
@@ -1077,7 +1077,7 @@
order_by=("action_time",), select_related=True)
# If no history was found, see whether this object even exists.
try:
- obj = mod.get_object(id__exact=object_id)
+ obj = mod.get_object(pk=object_id)
except ObjectDoesNotExist:
raise Http404
t = template_loader.get_template('admin_object_history')
comment:5 by , 20 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
Attaching a fix for this