Commit c555741a authored by Julien Phalip's avatar Julien Phalip
Browse files

Fixed #18530 -- Fixed a small regression in the admin filters where wrongly...

Fixed #18530 -- Fixed a small regression in the admin filters where wrongly formatted dates passed as url parameters caused an unhandled ValidationError. Thanks to david for the report.
parent c7f44ae0
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -8,13 +8,13 @@ certain test -- e.g. being a DateField or ForeignKey.
import datetime

from django.db import models
from django.core.exceptions import ImproperlyConfigured
from django.core.exceptions import ImproperlyConfigured, ValidationError
from django.utils.encoding import smart_text
from django.utils.translation import ugettext_lazy as _
from django.utils import timezone

from django.contrib.admin.util import (get_model_from_relation,
    reverse_field_path, get_limit_choices_to_from_path, prepare_lookup_value)
from django.contrib.admin.options import IncorrectLookupParameters

class ListFilter(object):
    title = None  # Human-readable title to appear in the right sidebar.
@@ -129,7 +129,10 @@ class FieldListFilter(ListFilter):
        return True

    def queryset(self, request, queryset):
        try:
            return queryset.filter(**self.used_parameters)
        except ValidationError as e:
            raise IncorrectLookupParameters(e)

    @classmethod
    def register(cls, test, list_filter_class, take_priority=False):
+1 −1
Original line number Diff line number Diff line
@@ -130,7 +130,7 @@ class CustomArticleAdmin(admin.ModelAdmin):


class ThingAdmin(admin.ModelAdmin):
    list_filter = ('color__warm', 'color__value')
    list_filter = ('color__warm', 'color__value', 'pub_date',)


class InquisitionAdmin(admin.ModelAdmin):
+1 −0
Original line number Diff line number Diff line
@@ -128,6 +128,7 @@ class Color2(Color):
class Thing(models.Model):
    title = models.CharField(max_length=20)
    color = models.ForeignKey(Color, limit_choices_to={'warm': True})
    pub_date = models.DateField(blank=True, null=True)
    def __str__(self):
        return self.title

+4 −0
Original line number Diff line number Diff line
@@ -436,6 +436,10 @@ class AdminViewBasicTest(TestCase):
        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)

        # Regression test for #18530
        response = self.client.get('/test_admin/%s/admin_views/thing/' % self.urlbit, {'pub_date__gte': 'foo'})
        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())