If your model has a string as key, there are some admin change pages that are not accessible.
If the primary key of your object ends in "add", "history" or "delete", you can't access the change form any more.
Culprit is the following code in admin\options.py, responsible for parsing the URL:
if url is None:
return self.changelist_view(request)
elif url.endswith('add'):
return self.add_view(request)
elif url.endswith('history'):
return self.history_view(request, unquote(url[:-8]))
elif url.endswith('delete'):
return self.delete_view(request, unquote(url[:-7]))
else:
return self.change_view(request, unquote(url))
A corrected version is:
if url is None:
return self.changelist_view(request)
elif url == 'add':
return self.add_view(request)
elif url.endswith('/history'):
return self.history_view(request, unquote(url[:-8]))
elif url.endswith('/delete'):
return self.delete_view(request, unquote(url[:-7]))
else:
return self.change_view(request, unquote(url))
This applies also to the current admin, but in the current only an object with a key equal to "add" will not be accessible (since the url processing is better).