#24709: ArrayField doesn't support .update() and F() objects
-------------------------------------+-------------------------------------
     Reporter:  ris                  |                    Owner:  nobody
         Type:  New feature          |                   Status:  new
    Component:  contrib.postgres     |                  Version:  1.8
     Severity:  Normal               |               Resolution:
     Keywords:  postgresql contrib   |             Triage Stage:  Accepted
  arrayfield update                  |
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------

Comment (by Frederik Creemers):

 I'm not that familiar with the internals, so I don't know if my use case
 helps flesh out ideas for how to implement this, but here's what I have:

 I have a score_weights list, which is an array of floating point
 numbers.Every User has a "scores" field, containing an array with the same
 number of items. I'd like to sort users by a weighted sum of these scores,
 with the weights coming from this score_weights list. In other words, the
 users are ordered by the dot product of their scores array and the
 score_weights array.


 {{{
 order_expression = -1 * sum([
     F("scores__%s" % i) * score_weights[i]
     for i in xrange(len(crit.score_weights))
 ])
 }}}

 Currently, this raises this error:

 {{{
 Traceback (most recent call last):
   File "<console>", line 1, in <module>
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/query.py", line 256, in __iter__
     self._fetch_all()
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/query.py", line 1087, in _fetch_all
     self._result_cache = list(self.iterator())
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/query.py", line 54, in __iter__
     results = compiler.execute_sql()
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/sql/compiler.py", line 824, in execute_sql
     sql, params = self.as_sql()
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/sql/compiler.py", line 369, in as_sql
     extra_select, order_by, group_by = self.pre_sql_setup()
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/sql/compiler.py", line 47, in
 pre_sql_setup
     order_by = self.get_order_by()
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/sql/compiler.py", line 308, in
 get_order_by
     self.query, allow_joins=True, reuse=None)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/expressions.py", line 209, in
 resolve_expression
     for expr in c.get_source_expressions()
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/expressions.py", line 404, in
 resolve_expression
     c.rhs = c.rhs.resolve_expression(query, allow_joins, reuse, summarize,
 for_save)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/expressions.py", line 403, in
 resolve_expression
     c.lhs = c.lhs.resolve_expression(query, allow_joins, reuse, summarize,
 for_save)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/expressions.py", line 403, in
 resolve_expression
     c.lhs = c.lhs.resolve_expression(query, allow_joins, reuse, summarize,
 for_save)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/expressions.py", line 403, in
 resolve_expression
     c.lhs = c.lhs.resolve_expression(query, allow_joins, reuse, summarize,
 for_save)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/expressions.py", line 403, in
 resolve_expression
     c.lhs = c.lhs.resolve_expression(query, allow_joins, reuse, summarize,
 for_save)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/expressions.py", line 404, in
 resolve_expression
     c.rhs = c.rhs.resolve_expression(query, allow_joins, reuse, summarize,
 for_save)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/expressions.py", line 403, in
 resolve_expression
     c.lhs = c.lhs.resolve_expression(query, allow_joins, reuse, summarize,
 for_save)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/expressions.py", line 463, in
 resolve_expression
     return query.resolve_ref(self.name, allow_joins, reuse, summarize)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/sql/query.py", line 1462, in resolve_ref
     self.get_initial_alias(), reuse)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/sql/query.py", line 1402, in setup_joins
     names, opts, allow_many, fail_on_missing=True)
   File "/Users/frederikcreemers/.virtualenvs/employebla/lib/python2.7
 /site-packages/django/db/models/sql/query.py", line 1370, in names_to_path
     " not permitted." % (names[pos + 1], name))
 FieldError: Cannot resolve keyword u'0' into field. Join on 'scores' not
 permitted.
 }}}

--
Ticket URL: <https://code.djangoproject.com/ticket/24709#comment:7>
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/061.3046ddd0d31273d85d83c2379f9d5a78%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to