#26056: ArrayField does not work with ValueListQuerySet
----------------------------------+------------------------------------
Reporter: CGenie | Owner:
Type: New feature | Status: new
Component: contrib.postgres | Version: master
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
----------------------------------+------------------------------------
Description changed by timgraham:
Old description:
> Basically queries of type:
>
> {{{#!python
> A.objects.filter(array_field__overlap=B.objects.filter(foo))
> }}}
>
> fail at Python level:
>
> {{{
> Traceback (most recent call last):
> File "failing.py", line 9, in <module>
> UserList.objects.filter(users__overlap=User.objects.all().values_list('id',
> flat=True)).count()
> File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
> packages/Django-1.8.5-py2.7.egg/django/db/models/query.py", line 318, in
> count
> return self.query.get_count(using=self.db)
> File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
> packages/Django-1.8.5-py2.7.egg/django/db/models/sql/query.py", line 466,
> in get_count
> number = obj.get_aggregation(using, ['__count'])['__count']
> File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
> packages/Django-1.8.5-py2.7.egg/django/db/models/sql/query.py", line 447,
> in get_aggregation
> result = compiler.execute_sql(SINGLE)
> File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
> packages/Django-1.8.5-py2.7.egg/django/db/models/sql/compiler.py", line
> 829, in execute_sql
> sql, params = self.as_sql()
> File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
> packages/Django-1.8.5-py2.7.egg/django/db/models/sql/compiler.py", line
> 387, in as_sql
> where, w_params = self.compile(self.query.where)
> File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
> packages/Django-1.8.5-py2.7.egg/django/db/models/sql/compiler.py", line
> 357, in compile
> sql, params = node.as_sql(self, self.connection)
> File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
> packages/Django-1.8.5-py2.7.egg/django/db/models/sql/where.py", line 104,
> in as_sql
> sql, params = compiler.compile(child)
> File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
> packages/Django-1.8.5-py2.7.egg/django/db/models/sql/compiler.py", line
> 357, in compile
> sql, params = node.as_sql(self, self.connection)
> File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
> packages/Django-1.8.5-py2.7.egg/django/contrib/postgres/fields/array.py",
> line 183, in as_sql
> sql, params = super(ArrayOverlap, self).as_sql(qn, connection)
> File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
> packages/Django-1.8.5-py2.7.egg/django/contrib/postgres/lookups.py", line
> 8, in as_sql
> params = lhs_params + rhs_params
> TypeError: can only concatenate list (not "tuple") to list
> }}}
>
> Toy project to reproduce this behavior can be found here:
> https://github.com/CGenie/django_array_join_fail
>
> This fails in 1.8 as well as in 1.9.
New description:
Basically queries of type:
{{{#!python
A.objects.filter(array_field__overlap=B.objects.filter(foo).values_list('id',
flat=True))
}}}
fail at Python level:
{{{
Traceback (most recent call last):
File "failing.py", line 9, in <module>
UserList.objects.filter(users__overlap=User.objects.all().values_list('id',
flat=True)).count()
File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
packages/Django-1.8.5-py2.7.egg/django/db/models/query.py", line 318, in
count
return self.query.get_count(using=self.db)
File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
packages/Django-1.8.5-py2.7.egg/django/db/models/sql/query.py", line 466,
in get_count
number = obj.get_aggregation(using, ['__count'])['__count']
File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
packages/Django-1.8.5-py2.7.egg/django/db/models/sql/query.py", line 447,
in get_aggregation
result = compiler.execute_sql(SINGLE)
File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
packages/Django-1.8.5-py2.7.egg/django/db/models/sql/compiler.py", line
829, in execute_sql
sql, params = self.as_sql()
File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
packages/Django-1.8.5-py2.7.egg/django/db/models/sql/compiler.py", line
387, in as_sql
where, w_params = self.compile(self.query.where)
File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
packages/Django-1.8.5-py2.7.egg/django/db/models/sql/compiler.py", line
357, in compile
sql, params = node.as_sql(self, self.connection)
File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
packages/Django-1.8.5-py2.7.egg/django/db/models/sql/where.py", line 104,
in as_sql
sql, params = compiler.compile(child)
File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
packages/Django-1.8.5-py2.7.egg/django/db/models/sql/compiler.py", line
357, in compile
sql, params = node.as_sql(self, self.connection)
File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
packages/Django-1.8.5-py2.7.egg/django/contrib/postgres/fields/array.py",
line 183, in as_sql
sql, params = super(ArrayOverlap, self).as_sql(qn, connection)
File "/home/przemek/.virtualenvs/italamo/lib/python2.7/site-
packages/Django-1.8.5-py2.7.egg/django/contrib/postgres/lookups.py", line
8, in as_sql
params = lhs_params + rhs_params
TypeError: can only concatenate list (not "tuple") to list
}}}
Toy project to reproduce this behavior can be found here:
https://github.com/CGenie/django_array_join_fail
This fails in 1.8 as well as in 1.9.
--
--
Ticket URL: <https://code.djangoproject.com/ticket/26056#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/064.562d4afd23db99cbb50a24c8213a64ff%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.