Fixed #12105: Corrected handling of isnull=False lookups in admin. Thanks marcob, Travis Cline, gabrielhurley.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12795 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
cc6e9b2286
commit
883329ecb3
|
@ -185,6 +185,13 @@ class ChangeList(object):
|
||||||
if key.endswith('__in'):
|
if key.endswith('__in'):
|
||||||
lookup_params[key] = value.split(',')
|
lookup_params[key] = value.split(',')
|
||||||
|
|
||||||
|
# if key ends with __isnull, special case '' and false
|
||||||
|
if key.endswith('__isnull'):
|
||||||
|
if value.lower() in ('', 'false'):
|
||||||
|
lookup_params[key] = False
|
||||||
|
else:
|
||||||
|
lookup_params[key] = True
|
||||||
|
|
||||||
# Apply lookup parameters from the query string.
|
# Apply lookup parameters from the query string.
|
||||||
try:
|
try:
|
||||||
qs = qs.filter(**lookup_params)
|
qs = qs.filter(**lookup_params)
|
||||||
|
|
|
@ -27,7 +27,7 @@ class Article(models.Model):
|
||||||
title = models.CharField(max_length=100)
|
title = models.CharField(max_length=100)
|
||||||
content = models.TextField()
|
content = models.TextField()
|
||||||
date = models.DateTimeField()
|
date = models.DateTimeField()
|
||||||
section = models.ForeignKey(Section)
|
section = models.ForeignKey(Section, null=True, blank=True)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
|
@ -217,6 +217,16 @@ class AdminViewBasicTest(TestCase):
|
||||||
response = self.client.get('/test_admin/%s/admin_views/thing/' % self.urlbit, {'color__id__exact': 'StringNotInteger!'})
|
response = self.client.get('/test_admin/%s/admin_views/thing/' % self.urlbit, {'color__id__exact': 'StringNotInteger!'})
|
||||||
self.assertRedirects(response, '/test_admin/%s/admin_views/thing/?e=1' % self.urlbit)
|
self.assertRedirects(response, '/test_admin/%s/admin_views/thing/?e=1' % self.urlbit)
|
||||||
|
|
||||||
|
def testIsNullLookups(self):
|
||||||
|
"""Ensure is_null is handled correctly."""
|
||||||
|
Article.objects.create(title="I Could Go Anywhere", content="Versatile", date=datetime.datetime.now())
|
||||||
|
response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit)
|
||||||
|
self.assertTrue('4 articles' in response.content, '"4 articles" missing from response')
|
||||||
|
response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit, {'section__isnull': 'false'})
|
||||||
|
self.assertTrue('3 articles' in response.content, '"3 articles" missing from response')
|
||||||
|
response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit, {'section__isnull': 'true'})
|
||||||
|
self.assertTrue('1 article' in response.content, '"1 article" missing from response')
|
||||||
|
|
||||||
def testLogoutAndPasswordChangeURLs(self):
|
def testLogoutAndPasswordChangeURLs(self):
|
||||||
response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit)
|
response = self.client.get('/test_admin/%s/admin_views/article/' % self.urlbit)
|
||||||
self.failIf('<a href="/test_admin/%s/logout/">' % self.urlbit not in response.content)
|
self.failIf('<a href="/test_admin/%s/logout/">' % self.urlbit not in response.content)
|
||||||
|
|
Loading…
Reference in New Issue