mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Fixed #20462 - Fixed sqlite regex lookups for null values and non-string fields.
This commit is contained in:
parent
536703abf0
commit
64041f0e6e
1
AUTHORS
1
AUTHORS
@ -270,6 +270,7 @@ answer newbie questions, and generally made Django that much better:
|
||||
Brian Harring <ferringb@gmail.com>
|
||||
Brant Harris
|
||||
Ronny Haryanto <http://ronny.haryan.to/>
|
||||
Axel Haustant <noirbizarre@gmail.com>
|
||||
Hawkeye
|
||||
Kent Hauser <kent@khauser.net>
|
||||
Joe Heck <http://www.rhonabwy.com/wp/>
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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'),
|
||||
['<Article: barfoobaz>', '<Article: bazbaRFOO>', '<Article: foobarbaz>'])
|
||||
|
||||
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$'),
|
||||
['<RegexTestModel: test>'])
|
||||
|
||||
def test_nonfield_lookups(self):
|
||||
"""
|
||||
Ensure that a lookup query containing non-fields raises the proper
|
||||
|
Loading…
Reference in New Issue
Block a user