Django

Code

Changeset 6487

Show
Ignore:
Timestamp:
10/13/07 21:13:04 (1 year ago)
Author:
mtredinnick
Message:

queryset-refactor: integrate select_related() into SQL generation.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/queryset-refactor/django/db/models/sql/query.py

    r6486 r6487  
    316316        if not self.tables: 
    317317            self.join((None, self.model._meta.db_table, None, None)) 
     318        if self.select_related: 
     319            self.fill_related_selections() 
    318320 
    319321    def get_columns(self): 
     
    490492        return alias 
    491493 
    492     def fill_table_cache(self, opts=None, root_alias=None, cur_depth=0, 
     494    def fill_related_selections(self, opts=None, root_alias=None, cur_depth=0, 
    493495            used=None): 
    494496        """ 
     
    501503            opts = self.model._meta 
    502504            root_alias = self.tables[0] 
    503             self.select.extend([(root_alias, f) for f in opts.fields]) 
     505            self.select.extend([(root_alias, f.column) for f in opts.fields]) 
    504506        if not used: 
    505507            used = [] 
     
    510512            table = f.rel.to._meta.db_table 
    511513            alias = self.join((root_alias, table, f.column, 
    512                     f.rel.get_related_field().column), exclusion=used) 
     514                    f.rel.get_related_field().column), exclusions=used) 
    513515            used.append(alias) 
    514516            self.select.extend([(table, f2.column) 
    515517                    for f2 in f.rel.to._meta.fields]) 
    516             self.fill_table_cache(f.rel.to._meta, alias, cur_depth + 1, used) 
     518            self.fill_related_selections(f.rel.to._meta, alias, cur_depth + 1, 
     519                    used) 
    517520 
    518521    def add_filter(self, filter_expr, connection=AND, negate=False): 
  • django/branches/queryset-refactor/tests/modeltests/select_related/models.py

    r5876 r6487  
    2828    def __unicode__(self): 
    2929        return self.name 
    30      
     30 
    3131class Klass(models.Model): 
    3232    name = models.CharField(max_length=50) 
     
    3434    def __unicode__(self): 
    3535        return self.name 
    36      
     36 
    3737class Order(models.Model): 
    3838    name = models.CharField(max_length=50) 
     
    6464    models = [Domain, Kingdom, Phylum, Klass, Order, Family, Genus, Species] 
    6565    assert len(names) == len(models), (names, models) 
    66      
     66 
    6767    parent = None 
    6868    for name, model in zip(names, models):