mirror of
https://github.com/django/django.git
synced 2024-12-23 01:25:58 +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>
|
Brian Harring <ferringb@gmail.com>
|
||||||
Brant Harris
|
Brant Harris
|
||||||
Ronny Haryanto <http://ronny.haryan.to/>
|
Ronny Haryanto <http://ronny.haryan.to/>
|
||||||
|
Axel Haustant <noirbizarre@gmail.com>
|
||||||
Hawkeye
|
Hawkeye
|
||||||
Kent Hauser <kent@khauser.net>
|
Kent Hauser <kent@khauser.net>
|
||||||
Joe Heck <http://www.rhonabwy.com/wp/>
|
Joe Heck <http://www.rhonabwy.com/wp/>
|
||||||
|
@ -519,4 +519,4 @@ def _sqlite_format_dtdelta(dt, conn, days, secs, usecs):
|
|||||||
return str(dt)
|
return str(dt)
|
||||||
|
|
||||||
def _sqlite_regexp(re_pattern, re_string):
|
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):
|
def __str__(self):
|
||||||
return self.name
|
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.core.exceptions import FieldError
|
||||||
from django.test import TestCase, skipUnlessDBFeature
|
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):
|
class LookupTests(TestCase):
|
||||||
@ -610,6 +610,21 @@ class LookupTests(TestCase):
|
|||||||
self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'b(.).*b\1'),
|
self.assertQuerysetEqual(Article.objects.filter(headline__regex=r'b(.).*b\1'),
|
||||||
['<Article: barfoobaz>', '<Article: bazbaRFOO>', '<Article: foobarbaz>'])
|
['<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):
|
def test_nonfield_lookups(self):
|
||||||
"""
|
"""
|
||||||
Ensure that a lookup query containing non-fields raises the proper
|
Ensure that a lookup query containing non-fields raises the proper
|
||||||
|
Loading…
Reference in New Issue
Block a user