#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.