#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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
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.

Reply via email to