Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge pull request #123 from apollo13/ticket18381

Fixed #18381 -- Stopped escaping object ids

when passing them to the contenttypes.shortcut view.

Thanks apollo13 for the patch and dhepper for the review.
  • Loading branch information...
commit 23d230f05833a63e951b8f451ff6c9f570eb3208 2 parents c172951 + e1643e3
@aaugustin aaugustin authored
View
2  django/contrib/admin/templates/admin/change_form.html
@@ -31,7 +31,7 @@
<ul class="object-tools">
{% block object-tools-items %}
<li><a href="history/" class="historylink">{% trans "History" %}</a></li>
- {% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ object_id }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
+ {% if has_absolute_url %}<li><a href="../../../r/{{ content_type_id }}/{{ original.pk }}/" class="viewsitelink">{% trans "View on site" %}</a></li>{% endif%}
{% endblock %}
</ul>
{% endif %}{% endif %}
View
6 tests/regressiontests/admin_views/fixtures/string-primary-key.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<django-objects version="1.0">
<object pk="1" model="admin_views.modelwithstringprimarykey">
- <field type="CharField" name="id"><![CDATA[abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 -_.!~*'() ;/?:@&=+$, <>#%" {}|\^[]`]]></field>
- </object>
-</django-objects>
+ <field type="CharField" name="string_pk"><![CDATA[abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 -_.!~*'() ;/?:@&=+$, <>#%" {}|\^[]`]]></field>
+ </object>
+</django-objects>
View
7 tests/regressiontests/admin_views/models.py
@@ -95,10 +95,13 @@ class CustomArticle(models.Model):
class ModelWithStringPrimaryKey(models.Model):
- id = models.CharField(max_length=255, primary_key=True)
+ string_pk = models.CharField(max_length=255, primary_key=True)
def __unicode__(self):
- return self.id
+ return self.string_pk
+
+ def get_absolute_url(self):
+ return u'/dummy/%s/' % self.string_pk
class Color(models.Model):
View
14 tests/regressiontests/admin_views/tests.py
@@ -1402,7 +1402,7 @@ def test_deleteconfirmation_link(self):
def test_url_conflicts_with_add(self):
"A model with a primary key that ends with add should be visible"
- add_model = ModelWithStringPrimaryKey(id="i have something to add")
+ add_model = ModelWithStringPrimaryKey(pk="i have something to add")
add_model.save()
response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' % quote(add_model.pk))
should_contain = """<h1>Change model with string primary key</h1>"""
@@ -1410,7 +1410,7 @@ def test_url_conflicts_with_add(self):
def test_url_conflicts_with_delete(self):
"A model with a primary key that ends with delete should be visible"
- delete_model = ModelWithStringPrimaryKey(id="delete")
+ delete_model = ModelWithStringPrimaryKey(pk="delete")
delete_model.save()
response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' % quote(delete_model.pk))
should_contain = """<h1>Change model with string primary key</h1>"""
@@ -1418,12 +1418,20 @@ def test_url_conflicts_with_delete(self):
def test_url_conflicts_with_history(self):
"A model with a primary key that ends with history should be visible"
- history_model = ModelWithStringPrimaryKey(id="history")
+ history_model = ModelWithStringPrimaryKey(pk="history")
history_model.save()
response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' % quote(history_model.pk))
should_contain = """<h1>Change model with string primary key</h1>"""
self.assertContains(response, should_contain)
+ def test_shortcut_view_with_escaping(self):
+ "'View on site should' work properly with char fields"
+ model = ModelWithStringPrimaryKey(pk='abc_123')
+ model.save()
+ response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/' % quote(model.pk))
+ should_contain = '/%s/" class="viewsitelink">' % model.pk
+ self.assertContains(response, should_contain)
+
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class SecureViewTests(TestCase):
Please sign in to comment.
Something went wrong with that request. Please try again.