Opened 15 years ago
Closed 9 years ago
#11329 closed Bug (wontfix)
get_count generates incorrect SQL for query sets with extra 'select' and 'where'
Reported by: | bogklug | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.0 |
Severity: | Normal | Keywords: | sql, extra select, extra where, get_count |
Cc: | markus.magnuson@… | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Extending an example on extra 'select' from http://docs.djangoproject.com/en/1.0/ref/models/querysets/ with an extra 'with' and calling get_count:
Blog.objects.extra( select={ 'entry_count': 'SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id' }, where=['entry_count=0'] ).query.get_count()
results in OperationalError: no such column: entry_count.
The SQL for the query itself is ok. It seems that the problem is caused by get_count.
Attachments (1)
Change History (9)
comment:1 by , 15 years ago
Description: | modified (diff) |
---|
by , 15 years ago
Attachment: | sql-get-count-with-select-extra.patch added |
---|
Check for extra_select in get_count
comment:2 by , 15 years ago
I am not a Django developer, but this looks like a simple patch. The get_count() function does not check for select causes included with ".extra". Attached my patch.
comment:3 by , 15 years ago
Triage Stage: | Unreviewed → Accepted |
---|
comment:4 by , 14 years ago
Severity: | → Normal |
---|---|
Type: | → Bug |
comment:7 by , 9 years ago
Cc: | added |
---|
It is still possible to trigger this error, but it seems like aggregate()
and annotate()
would since long be the preferred way to carry out anything similar to this example.
comment:8 by , 9 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
I agree that the aggregate()
and annotate()
methods should be used these days, so I don't see much value in fixing this issue.
Please use the preview option. Also, are you using the internal get_count() function instead of the public count() API.