title: django's .extra(where= clauses are clobbered by table-renaming .filter(foo__in=... subselects
body: <p>The short of it is, the table names of all queries that are inside a filter get renamed to u0, u1, ..., so my extra where clauses won't know what table to point to.  I would love to not have to hand-make all the queries for every way I might subselect on this data, and my current workaround is to turn my extra'd queries into pk values_lists, but those are really slow and something of an abomination.</p>
  
  <p>Here's what this all looks like.  You can mostly ignore the details of what goes in the extra of this manager method, except the first sql line which points to products_product.id:</p>
  
  <pre><code>def by_status(self, *statii):
      return self.extra(where=["""products_product.id IN                                                                                                                                                  
          (SELECT recent.product_id                                                                                                                                                                          
            FROM (                                                                                                                                                                                           
              SELECT product_id, MAX(start_date) AS latest                                                                                                                                                   
              FROM products_productstatus                                                                                                                                                                    
              GROUP BY product_id                                                                                                                                                                            
            ) AS recent                                                                                                                                                                                      
            JOIN products_productstatus AS ps ON ps.product_id = recent.product_id                                                                                                                           
            WHERE ps.start_date = recent.latest                                                                                                                                                              
              AND ps.status IN (%s))""" % (', '.join([str(stat) for stat in statii]),)])
  </code></pre>
  
  <p>Which works wonderfully for all the situations involving only the products_product table.</p>
  
  <p>When I want these products as a subselect, i do:</p>
  
  <pre><code>Piece.objects.filter(
      product__in=Product.objects.filter(
          pk__in=list(
              Product.objects.by_status(FEATURED).values_list('id', flat=True))))
  </code></pre>
  
  <p>How can I keep the generalized abilities of a query set, yet still use an extra where clause?</p>