Django

Code

Changeset 7597

Show
Ignore:
Timestamp:
06/08/08 13:13:46 (6 months ago)
Author:
jacob
Message:

Fixed #7369: fixed a corner-case involving select_related() following non-null FKs after null ones. Thanks, George Vilches

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/models/sql/query.py

    r7502 r7597  
    852852 
    853853    def fill_related_selections(self, opts=None, root_alias=None, cur_depth=1, 
    854             used=None, requested=None, restricted=None): 
     854            used=None, requested=None, restricted=None, nullable=None): 
    855855        """ 
    856856        Fill in the information needed for a select_related query. The current 
     
    884884                continue 
    885885            table = f.rel.to._meta.db_table 
     886            if nullable or f.null: 
     887                promote = True 
     888            else: 
     889                promote = False 
    886890            if model: 
    887891                int_opts = opts 
     
    892896                    alias = self.join((alias, int_opts.db_table, lhs_col, 
    893897                            int_opts.pk.column), exclusions=used, 
    894                             promote=f.null
     898                            promote=promote
    895899            else: 
    896900                alias = root_alias 
    897901            alias = self.join((alias, table, f.column, 
    898902                    f.rel.get_related_field().column), exclusions=used, 
    899                     promote=f.null
     903                    promote=promote
    900904            used.add(alias) 
    901905            self.related_select_cols.extend([(alias, f2.column) 
     
    906910            else: 
    907911                next = False 
     912            if f.null is not None: 
     913                new_nullable = f.null 
     914            else: 
     915                new_nullable = None 
    908916            self.fill_related_selections(f.rel.to._meta, alias, cur_depth + 1, 
    909                     used, next, restricted
     917                    used, next, restricted, new_nullable
    910918 
    911919    def add_filter(self, filter_expr, connector=AND, negate=False, trim=False,