#18381: Underscore in CharField primary key breaks the admin "view on site" link
-------------------------------+--------------------
     Reporter:  dappawit       |      Owner:  nobody
         Type:  Bug            |     Status:  new
    Component:  contrib.admin  |    Version:  1.4
     Severity:  Normal         |   Keywords:
 Triage Stage:  Unreviewed     |  Has patch:  0
Easy pickings:  0              |      UI/UX:  0
-------------------------------+--------------------
 I have a model in which the primary key is a !CharField and the
 get_absolute_url method is defined. When I create an instance of the model
 with the primary key containing an underscore "_", the admin links for
 that object have '5F' (the ASCII hex code for an underscore) after the
 underscore.  For instance, if the primary key was 'abc_123', then the link
 to the object within the admin would contain 'abc_5F123'.  Strangely,
 these links work just fine.  And if you strip out the '5F', the links also
 work.  However, with the '5F' in the URL, the ''view on site'' link does
 ''not'' work.

 To recreate the bug:

  1. I created a new project and enabled the Admin, both in settings.py and
 in urls.py.
  2. I created an app 'testapp' with the following models.py:

 {{{#!python
 from django.db import models

 class MyModel(models.Model):
     id = models.CharField(max_length=100, primary_key=True)

     def get_absolute_url(self):
         return '/mymodel/{0}/'.format(self.id)
 }}}

  3. I added 'testapp' to the INSTALLED_APPS setting.
  4. I started the dev server and created two instances of the '!MyModel'
 model in the admin: one with the primary key 'abc123' and one with the
 primary key 'abc_123'.
  5. Using the 'abc123' instance in the Admin site:
    a. it is at the Admin url of `/admin/testapp/mymodel/abc123/`, as
 expected.
    b. the ''view on site'' link points to `/admin/r/8/abc123/`, as
 expected.
    c. clicking on the ''view on site'' link tries to redirect me to
 `example.com/mymodel/abc123/` as expected.  (I'm actually taken to an IANA
 page about example.com being a fake domain.  But Chrome's developer tools
 shows that it first tried to redirect me to the example.com URL above.)
  6. Using the 'abc_123' instance in the Admin site:
    a. it is at the Admin url of `/admin/testapp/mymodel/abc_5F123/`
    b. the ''view on site'' link points to `/admin/r/8/abc_5F123/`,
    c. clicking on the ''view on site'' link results in a 404 error at the
 `/admin/r/8/abc_5F123/` url.  I get the message: "Content type 8 object
 abc_5F123 doesn't exist".
    d. manually entering the url `/admin/r/8/abc_123/` (note: without the
 '5F') work as expected.
    e. manually entering the url `/admin/testapp/mymodel/abc_123/` does
 ''not'' work in this demo, although it worked in the full application
 where I first encountered the problem.

 I'd like to be able to use the ''view on site'' link even when objects
 have underscores in their primary keys.  Even better would be to also
 remove the strange '5F' from the admin site URLs, although since they
 still work it is not absolutely necessary.

 Tested with:
 - Django 1.4 using SQLite
 - both Chrome and Firefox
 - Discovered the issue on Linux, then created small test app on Windows.

 I hope that makes sense. Thanks.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/18381>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to