summaryrefslogtreecommitdiff
path: root/django/contrib/postgres/fields/array.py
diff options
context:
space:
mode:
authorDmitry Dygalo <d.dygalo@volsor.com>2015-11-07 13:52:40 +0100
committerTim Graham <timograham@gmail.com>2015-11-14 11:21:16 -0500
commit263b3d2ba132ea443193dc0b728741317742c8d3 (patch)
tree8cde496c0bf4ec483e48d9fe5f10e4e9c57911c2 /django/contrib/postgres/fields/array.py
parentb8f78823eefd37327bd7be557cca3663a212492d (diff)
downloaddjango-263b3d2ba132ea443193dc0b728741317742c8d3.tar.gz
Fixed #25666 -- Fixed the exact lookup of ArrayField.
Diffstat (limited to 'django/contrib/postgres/fields/array.py')
-rw-r--r--django/contrib/postgres/fields/array.py15
1 files changed, 12 insertions, 3 deletions
diff --git a/django/contrib/postgres/fields/array.py b/django/contrib/postgres/fields/array.py
index 27c369d61f..4da2a9658b 100644
--- a/django/contrib/postgres/fields/array.py
+++ b/django/contrib/postgres/fields/array.py
@@ -5,6 +5,7 @@ from django.contrib.postgres.forms import SimpleArrayField
from django.contrib.postgres.validators import ArrayMaxLengthValidator
from django.core import checks, exceptions
from django.db.models import Field, IntegerField, Transform
+from django.db.models.lookups import Exact
from django.utils import six
from django.utils.translation import string_concat, ugettext_lazy as _
@@ -166,7 +167,7 @@ class ArrayField(Field):
class ArrayContains(lookups.DataContains):
def as_sql(self, qn, connection):
sql, params = super(ArrayContains, self).as_sql(qn, connection)
- sql += '::%s' % self.lhs.output_field.db_type(connection)
+ sql = '%s::%s' % (sql, self.lhs.output_field.db_type(connection))
return sql, params
@@ -174,7 +175,15 @@ class ArrayContains(lookups.DataContains):
class ArrayContainedBy(lookups.ContainedBy):
def as_sql(self, qn, connection):
sql, params = super(ArrayContainedBy, self).as_sql(qn, connection)
- sql += '::%s' % self.lhs.output_field.db_type(connection)
+ sql = '%s::%s' % (sql, self.lhs.output_field.db_type(connection))
+ return sql, params
+
+
+@ArrayField.register_lookup
+class ArrayExact(Exact):
+ def as_sql(self, qn, connection):
+ sql, params = super(ArrayExact, self).as_sql(qn, connection)
+ sql = '%s::%s' % (sql, self.lhs.output_field.db_type(connection))
return sql, params
@@ -182,7 +191,7 @@ class ArrayContainedBy(lookups.ContainedBy):
class ArrayOverlap(lookups.Overlap):
def as_sql(self, qn, connection):
sql, params = super(ArrayOverlap, self).as_sql(qn, connection)
- sql += '::%s' % self.lhs.output_field.db_type(connection)
+ sql = '%s::%s' % (sql, self.lhs.output_field.db_type(connection))
return sql, params