Loading django/db/backends/sqlite3/base.py +2 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ from django.db.backends.sqlite3.introspection import DatabaseIntrospection from django.db.models import fields from django.db.models.sql import aggregates from django.utils.dateparse import parse_date, parse_datetime, parse_time from django.utils.encoding import force_text from django.utils.functional import cached_property from django.utils.safestring import SafeBytes from django.utils import six Loading Loading @@ -522,4 +523,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, str(re_string))) if re_string is not None else False return bool(re.search(re_pattern, force_text(re_string))) if re_string is not None else False tests/lookup/tests.py +7 −0 Original line number Diff line number Diff line Loading @@ -625,6 +625,13 @@ class LookupTests(TestCase): self.assertQuerysetEqual(Season.objects.filter(gt__regex=r'^444$'), ['<Season: 2013>']) def test_regex_non_ascii(self): """ Ensure that a regex lookup does not trip on non-ascii characters. """ Player.objects.create(name='\u2660') Player.objects.get(name__regex='\u2660') def test_nonfield_lookups(self): """ Ensure that a lookup query containing non-fields raises the proper Loading Loading
django/db/backends/sqlite3/base.py +2 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ from django.db.backends.sqlite3.introspection import DatabaseIntrospection from django.db.models import fields from django.db.models.sql import aggregates from django.utils.dateparse import parse_date, parse_datetime, parse_time from django.utils.encoding import force_text from django.utils.functional import cached_property from django.utils.safestring import SafeBytes from django.utils import six Loading Loading @@ -522,4 +523,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, str(re_string))) if re_string is not None else False return bool(re.search(re_pattern, force_text(re_string))) if re_string is not None else False
tests/lookup/tests.py +7 −0 Original line number Diff line number Diff line Loading @@ -625,6 +625,13 @@ class LookupTests(TestCase): self.assertQuerysetEqual(Season.objects.filter(gt__regex=r'^444$'), ['<Season: 2013>']) def test_regex_non_ascii(self): """ Ensure that a regex lookup does not trip on non-ascii characters. """ Player.objects.create(name='\u2660') Player.objects.get(name__regex='\u2660') def test_nonfield_lookups(self): """ Ensure that a lookup query containing non-fields raises the proper Loading