diff --git a/AUTHORS b/AUTHORS index cedff32fe0..2355eeb655 100644 --- a/AUTHORS +++ b/AUTHORS @@ -270,6 +270,7 @@ answer newbie questions, and generally made Django that much better: Brian Harring Brant Harris Ronny Haryanto + Axel Haustant Hawkeye Kent Hauser Joe Heck diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index a2d925ac3f..3808170f9e 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -519,4 +519,4 @@ def _sqlite_format_dtdelta(dt, conn, days, secs, usecs): return str(dt) def _sqlite_regexp(re_pattern, re_string): - return bool(re.search(re_pattern, re_string)) + return bool(re.search(re_pattern, str(re_string))) if re_string is not None else False diff --git a/tests/lookup/models.py b/tests/lookup/models.py index f388ddf403..af236cf56f 100644 --- a/tests/lookup/models.py +++ b/tests/lookup/models.py @@ -57,3 +57,12 @@ class Player(models.Model): def __str__(self): return self.name + + +@python_2_unicode_compatible +class RegexTestModel(models.Model): + name = models.CharField(max_length=100, null=True) + integer = models.IntegerField(null=True) + + def __str__(self): + return self.name diff --git a/tests/lookup/tests.py b/tests/lookup/tests.py index de7105f92d..5affac6b00 100644 --- a/tests/lookup/tests.py +++ b/tests/lookup/tests.py @@ -6,7 +6,7 @@ from operator import attrgetter from django.core.exceptions import FieldError from django.test import TestCase, skipUnlessDBFeature -from .models import Author, Article, Tag, Game, Season, Player +from .models import Author, Article, Tag, Game, Season, Player, RegexTestModel class LookupTests(TestCase): @@ -610,6 +610,21 @@ class LookupTests(TestCase): self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'b(.).*b\1'), ['', '', '']) + def test_regex_null(self): + """ + Ensure that a regex lookup does not fail on null/None values + """ + RegexTestModel.objects.create(name=None) + self.assertQuerysetEqual(RegexTestModel.objects.filter(name__regex=r'^$'), []) + + def test_regex_non_string(self): + """ + Ensure that a regex lookup does not fail on non-string fields + """ + RegexTestModel.objects.create(name='test', integer=5) + self.assertQuerysetEqual(RegexTestModel.objects.filter(integer__regex=r'^5$'), + ['']) + def test_nonfield_lookups(self): """ Ensure that a lookup query containing non-fields raises the proper