#33159: Missing table alias in generated query after used in subquery -------------------------------------+------------------------------------- Reporter: Michal | Owner: nobody Čihař | Type: Bug | Status: new Component: Database | Version: 4.0 layer (models, ORM) | Severity: Release | Keywords: blocker | Triage Stage: | Has patch: 0 Unreviewed | Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | -------------------------------------+------------------------------------- When running our tests against 4.0a1, it fails with:
{{{ Traceback (most recent call last): File "/opt/hostedtoolcache/Python/3.9.7/x64/lib/python3.9/site- packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) psycopg2.errors.UndefinedTable: missing FROM-clause entry for table "U0" LINE 1: ...UNT(*) AS "__count" FROM "trans_component" WHERE ("U0"."repo... }}} It seems that the table alias is missing from the query. Full log can be seen at https://github.com/WeblateOrg/weblate/pull/6608/checks?check_run_id=3751233865 Reproducing outside the test case: {{{ >>> from weblate.trans.models import Component >>> from django.db.models import Q >>> c = Component.objects.filter(Q(repo__in=('x', 'y')) | Q(repo__endswith='xxxx')) >>> c.count() 0 >>> Component.objects.filter(linked_component__in=c).count() 0 >>> c.count() Traceback (most recent call last): File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) psycopg2.errors.UndefinedTable: missing FROM-clause entry for table "U0" LINE 1: ...UNT(*) AS "__count" FROM "trans_component" WHERE ("U0"."repo... ^ The above exception was the direct cause of the following exception: Traceback (most recent call last): File "<console>", line 1, in <module> File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/models/query.py", line 416, in count return self.query.get_count(using=self.db) File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/models/sql/query.py", line 515, in get_count number = obj.get_aggregation(using, ['__count'])['__count'] File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/models/sql/query.py", line 500, in get_aggregation result = compiler.execute_sql(SINGLE) File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/models/sql/compiler.py", line 1198, in execute_sql cursor.execute(sql, params) File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/backends/utils.py", line 98, in execute return super().execute(sql, params) File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/backends/utils.py", line 66, in execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers return executor(sql, params, many, context) File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/utils.py", line 90, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "/home/nijel/weblate/weblate/.venv/lib/python3.9/site- packages/django/db/backends/utils.py", line 84, in _execute return self.cursor.execute(sql, params) django.db.utils.ProgrammingError: missing FROM-clause entry for table "U0" LINE 1: ...UNT(*) AS "__count" FROM "trans_component" WHERE ("U0"."repo... ^ }}} Note: * The queryset has to consist of multiple Q * Calling count on the queryset works until it is used in a subquery -- Ticket URL: <https://code.djangoproject.com/ticket/33159> 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 view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/048.5c12725ecab7e2a625d4135918382dd0%40djangoproject.com.