Opened 19 years ago
Closed 18 years ago
#3355 closed (invalid)
filter() with related table stomps on extra(tables)
| Reported by: | Owned by: | Adrian Holovaty | |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | dev |
| Severity: | Keywords: | ||
| Cc: | treborhudson@… | Triage Stage: | Accepted |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
I started a discussion here with no responses so I thought I'd file a bug so this doesn't get lost...
http://groups.google.com/group/django-developers/browse_thread/thread/a88046d26172908d/?hl=en#
Summary: If you're using extra() to specify extra tables to add to your query AND you're using filter() with a related table, the extra() table gets lost. Example (also found in the above message):
This correctly adds "page_item" to the FROM clause by using extra(). Notice I'm not yet referencing a related table in the filter() clause since template_id is contained in the Page object.
In [29]: Page.objects.extra(
tables=['page_item'],
where=['page_item.page_id=page_page.id'])
.filter(template__id='1')._get_sql_clause()
Out[29]:
(['`page_page`.`id`',
'`page_page`.`number`',
'`page_page`.`title`',
'`page_page`.`template_id`',
'`page_page`.`description`'],
' FROM `page_page` , `page_item` WHERE page_item.page_id=page_page.id
AND (`page_page`.`template_id` = %s)',
['1'])
But adding the related table lookup for the 'name' column in the filter() clause breaks the extra() tables and "page_item" disappears...
In [30]: Page.objects.extra(
tables=['page_item'],
where=['page_item.page_id=page_page.id'])
.filter(template__name='Default Template')
._get_sql_clause()
Out[30]:
(['`page_page`.`id`',
'`page_page`.`number`',
'`page_page`.`title`',
'`page_page`.`template_id`',
'`page_page`.`description`'],
' FROM `page_page` INNER JOIN `page_template` AS `page_page__template`
ON `page_page`.`template_id` = `page_page__template`.`id` , `page_item`
WHERE page_item.page_id=page_page.id AND (`page_page__template`.`name` =
%s)',
['Default Template'])
Change History (2)
comment:1 by , 19 years ago
| Triage Stage: | Unreviewed → Accepted |
|---|
comment:2 by , 18 years ago
| Resolution: | → invalid |
|---|---|
| Status: | new → closed |
This is my ticket but now, 6-7 months later, I don't see anything wrong here. The page_item stuff is plainly there. I'm going to close as invalid.