summaryrefslogtreecommitdiff
path: root/tests/regressiontests
diff options
context:
space:
mode:
authorLuke Plant <L.Plant.98@cantab.net>2011-01-28 14:08:42 +0000
committerLuke Plant <L.Plant.98@cantab.net>2011-01-28 14:08:42 +0000
commit655d5afea9d1f3d5aa55efc9fe77a14b353e35a6 (patch)
treede6d7a7ed181f82235f4e37c4e7ca7f91af8c3eb /tests/regressiontests
parentc24bdf044ba23f2aa09ea4637a368ea86fd1c128 (diff)
Fixed #14880 - raw_id_fields in admin does not work when limit_choices_to dictionary has value=False
Thanks to smallming for the report. git-svn-id: http://code.djangoproject.com/svn/django/trunk@15348 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests')
-rw-r--r--tests/regressiontests/admin_views/models.py16
-rw-r--r--tests/regressiontests/admin_views/tests.py36
2 files changed, 48 insertions, 4 deletions
diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py
index 08a2d36c3f..02c6b9208d 100644
--- a/tests/regressiontests/admin_views/models.py
+++ b/tests/regressiontests/admin_views/models.py
@@ -187,17 +187,27 @@ class Actor(models.Model):
class Inquisition(models.Model):
expected = models.BooleanField()
leader = models.ForeignKey(Actor)
+ country = models.CharField(max_length=20)
+
def __unicode__(self):
- return self.expected
+ return u"by %s from %s" % (self.leader, self.country)
+
+class InquisitionAdmin(admin.ModelAdmin):
+ list_display = ('leader', 'country', 'expected')
class Sketch(models.Model):
title = models.CharField(max_length=100)
inquisition = models.ForeignKey(Inquisition, limit_choices_to={'leader__name': 'Palin',
'leader__age': 27,
+ 'expected': False,
})
+
def __unicode__(self):
return self.title
+class SketchAdmin(admin.ModelAdmin):
+ raw_id_fields = ('inquisition',)
+
class Fabric(models.Model):
NG_CHOICES = (
('Textured', (
@@ -663,8 +673,8 @@ admin.site.register(ModelWithStringPrimaryKey)
admin.site.register(Color)
admin.site.register(Thing, ThingAdmin)
admin.site.register(Actor)
-admin.site.register(Inquisition)
-admin.site.register(Sketch)
+admin.site.register(Inquisition, InquisitionAdmin)
+admin.site.register(Sketch, SketchAdmin)
admin.site.register(Person, PersonAdmin)
admin.site.register(Persona, PersonaAdmin)
admin.site.register(Subscriber, SubscriberAdmin)
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index 30e8c2f8e0..54cc749302 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -2,6 +2,7 @@
import re
import datetime
+import urlparse
from django.conf import settings
from django.core import mail
@@ -34,7 +35,7 @@ from models import (Article, BarAccount, CustomArticle, EmptyModel,
Person, Persona, Picture, Podcast, Section, Subscriber, Vodcast,
Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit,
Category, Post, Plot, FunkyTag, Chapter, Book, Promo, WorkHour, Employee,
- Question, Answer)
+ Question, Answer, Inquisition, Actor)
class AdminViewBasicTest(TestCase):
@@ -2350,6 +2351,39 @@ class ReadonlyTest(TestCase):
response = self.client.get('/test_admin/admin/admin_views/pizza/add/')
self.assertEqual(response.status_code, 200)
+
+class RawIdFieldsTest(TestCase):
+ fixtures = ['admin-views-users.xml']
+
+ def setUp(self):
+ self.client.login(username='super', password='secret')
+
+ def tearDown(self):
+ self.client.logout()
+
+ def test_limit_choices_to(self):
+ """Regression test for 14880"""
+ # This includes tests integers, strings and booleans in the lookup query string
+ actor = Actor.objects.create(name="Palin", age=27)
+ inquisition1 = Inquisition.objects.create(expected=True,
+ leader=actor,
+ country="England")
+ inquisition2 = Inquisition.objects.create(expected=False,
+ leader=actor,
+ country="Spain")
+ response = self.client.get('/test_admin/admin/admin_views/sketch/add/')
+ # Find the link
+ m = re.search(r'<a href="([^"]*)"[^>]* id="lookup_id_inquisition"', response.content)
+ self.assertTrue(m) # Got a match
+ popup_url = m.groups()[0].replace("&amp;", "&")
+
+ # Handle relative links
+ popup_url = urlparse.urljoin(response.request['PATH_INFO'], popup_url)
+ # Get the popup
+ response2 = self.client.get(popup_url)
+ self.assertContains(response2, "Spain")
+ self.assertNotContains(response2, "England")
+
class UserAdminTest(TestCase):
"""
Tests user CRUD functionality.