Opened 12 years ago

Closed 12 years ago

#3355 closed (invalid)

filter() with related table stomps on extra(tables)

Reported by: Rob Hudson <treborhudson@…> Owned by: Adrian Holovaty
Component: Database layer (models, ORM) Version: master
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


I started a discussion here with no responses so I thought I'd file a bug so this doesn't get lost...

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(
  ' FROM `page_page` , `page_item` WHERE
AND (`page_page`.`template_id` = %s)',

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(
                .filter(template__name='Default Template')
  ' FROM `page_page` INNER JOIN `page_template` AS `page_page__template`
ON `page_page`.`template_id` = `page_page__template`.`id` , `page_item`
WHERE AND (`page_page__template`.`name` =
  ['Default Template']) 

Change History (2)

comment:1 Changed 12 years ago by Simon G. <dev@…>

Triage Stage: UnreviewedAccepted

comment:2 Changed 12 years ago by Rob Hudson <treborhudson@…>

Resolution: invalid
Status: newclosed

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.

Note: See TracTickets for help on using tickets.
Back to Top