Opened 7 years ago
Last modified 5 years ago
#28408 closed Bug
Inconsistant error message for trying to update an annotated F expression — at Initial Version
Reported by: | Kevin Marsh | Owned by: | |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | annotate, F, update |
Cc: | Can Sarıgöl | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I ran into a bit of a nasty error yesterday on Django 1.11, Postgres 9.5 where I was trying to do an update using an F
expression where the value in that expression referred to an annotation of an annotation, each using a Case
statement inside the annotation. The error message it was giving me was something like the following:
ProgrammingError Traceback (most recent call last) <ipython-input-1-29e48364245c> in <module>() ----> 1 MyModel.objects.causing_problems() /usr/src/app/apps/myapp/managers.py in causing_problems(self) 833 ).update( --> 834 my_field=F('my_annotated_field'), 835 ) 836 /usr/src/app/apps/django/db/models/query.py in update(self, **kwargs) 645 query._annotations = None 646 with transaction.atomic(using=self.db, savepoint=False): --> 647 rows = query.get_compiler(self.db).execute_sql(CURSOR) 648 self._result_cache = None 649 return rows /usr/src/app/apps/django/db/models/sql/compiler.py in execute_sql(self, result_type) 1189 related queries are not available. 1190 """ -> 1191 cursor = super(SQLUpdateCompiler, self).execute_sql(result_type) 1192 try: 1193 rows = cursor.rowcount if cursor else 0 /usr/src/app/apps/django/db/models/sql/compiler.py in execute_sql(self, result_type, chunked_fetch) 884 # silencing when dropping Python 2 compatibility. 885 pass --> 886 raise original_exception 887 888 if result_type == CURSOR: ProgrammingError: missing FROM-clause entry for table "myapp_mymodel" LINE 1: ...false END, "a_field" = CASE WHEN CASE WHEN ("myapp_my...
Spent a while trying to debug where it was going wrong, ended up narrowing down the problem to trying to update a field using an F
expression on an annotated field which included a join in it. I'm not sure if better error message would have helped in my case but in the much simpler test attached it'd be usfeul if the first and second assertions raised the same or similar error message.
Change History (1)
by , 7 years ago
Attachment: | unclear_f_annotations_error_message_failing_test.diff added |
---|