#33050: calling count on union of queries having select_related results in
error.
-------------------------------------+-------------------------------------
Reporter: Sunkyue- | Owner: nobody
Kim |
Type: Bug | Status: new
Component: Database | Version: 3.2
layer (models, ORM) | Keywords: orm, count, union,
Severity: Normal | select_related
Triage Stage: | Has patch: 0
Unreviewed |
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
test case:
{{{
class ModelA(models.Model):
value = models.IntegerField()
class ModelB(models.Model):
model_a = models.ForeignKey("ModelA", on_delete=models.CASCADE)
}}}
->
{{{
ModelB.objects.select_related('model_a').union(ModelB.objects.select_related('model_a')).count()
}}}
results in error.
{{{
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\models\query.py", line 412, in count
return self.query.get_count(using=self.db)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\models\sql\query.py", line 521, in get_count
number = obj.get_aggregation(using, ['__count'])['__count']
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\models\sql\query.py", line 506, in get_aggregation
result = compiler.execute_sql(SINGLE)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\models\sql\compiler.py", line 1175, in execute_sql
cursor.execute(sql, params)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\backends\utils.py", line 98, in execute
return super().execute(sql, params)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\backends\utils.py", line 66, in execute
return self._execute_with_wrappers(sql, params, many=False,
executor=self._execute)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\backends\utils.py", line 75, in _execute_with_wrappers
return executor(sql, params, many, context)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\django\db\backends\mysql\base.py", line 73, in execute
return self.cursor.execute(query, args)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\MySQLdb\cursors.py", line 206, in execute
res = self._query(query)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\MySQLdb\cursors.py", line 319, in _query
db.query(q)
File "c:\Users\user\Documents\workspace\realclass2-api\.venv\lib\site-
packages\MySQLdb\connections.py", line 259, in query
_mysql.connection.query(self, query)
django.db.utils.OperationalError: (1060, "Duplicate column name 'id'")
}}}
suggested fix:
on django.db.models.sql.query.py -> Query.get_aggregation, from
{{{
inner_query.select_for_update = False
inner_query.select_related = False
inner_query.set_annotation_mask(self.annotation_select)
}}}
to
{{{
inner_query.select_for_update = False
inner_query.select_related = False
for combined_query in inner_query.combined_queries:
combined_query.select_related = False
inner_query.set_annotation_mask(self.annotation_select)
}}}
can solve the problem I think.
--
Ticket URL: <https://code.djangoproject.com/ticket/33050>
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 view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/054.95d543f134c52eae590da12c9d4c3909%40djangoproject.com.