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