Author: mtredinnick
Date: 2007-10-13 21:13:04 -0500 (Sat, 13 Oct 2007)
New Revision: 6487

Modified:
   django/branches/queryset-refactor/django/db/models/sql/query.py
   django/branches/queryset-refactor/tests/modeltests/select_related/models.py
Log:
queryset-refactor: integrate select_related() into SQL generation.


Modified: django/branches/queryset-refactor/django/db/models/sql/query.py
===================================================================
--- django/branches/queryset-refactor/django/db/models/sql/query.py     
2007-10-14 02:12:40 UTC (rev 6486)
+++ django/branches/queryset-refactor/django/db/models/sql/query.py     
2007-10-14 02:13:04 UTC (rev 6487)
@@ -315,6 +315,8 @@
         """
         if not self.tables:
             self.join((None, self.model._meta.db_table, None, None))
+        if self.select_related:
+            self.fill_related_selections()
 
     def get_columns(self):
         """
@@ -489,7 +491,7 @@
         self.rev_join_map[alias] = t_ident
         return alias
 
-    def fill_table_cache(self, opts=None, root_alias=None, cur_depth=0,
+    def fill_related_selections(self, opts=None, root_alias=None, cur_depth=0,
             used=None):
         """
         Fill in the information needed for a select_related query.
@@ -500,7 +502,7 @@
         if not opts:
             opts = self.model._meta
             root_alias = self.tables[0]
-            self.select.extend([(root_alias, f) for f in opts.fields])
+            self.select.extend([(root_alias, f.column) for f in opts.fields])
         if not used:
             used = []
 
@@ -509,11 +511,12 @@
                 continue
             table = f.rel.to._meta.db_table
             alias = self.join((root_alias, table, f.column,
-                    f.rel.get_related_field().column), exclusion=used)
+                    f.rel.get_related_field().column), exclusions=used)
             used.append(alias)
             self.select.extend([(table, f2.column)
                     for f2 in f.rel.to._meta.fields])
-            self.fill_table_cache(f.rel.to._meta, alias, cur_depth + 1, used)
+            self.fill_related_selections(f.rel.to._meta, alias, cur_depth + 1,
+                    used)
 
     def add_filter(self, filter_expr, connection=AND, negate=False):
         """

Modified: 
django/branches/queryset-refactor/tests/modeltests/select_related/models.py
===================================================================
--- django/branches/queryset-refactor/tests/modeltests/select_related/models.py 
2007-10-14 02:12:40 UTC (rev 6486)
+++ django/branches/queryset-refactor/tests/modeltests/select_related/models.py 
2007-10-14 02:13:04 UTC (rev 6487)
@@ -27,13 +27,13 @@
     kingdom = models.ForeignKey(Kingdom)
     def __unicode__(self):
         return self.name
-    
+
 class Klass(models.Model):
     name = models.CharField(max_length=50)
     phylum = models.ForeignKey(Phylum)
     def __unicode__(self):
         return self.name
-    
+
 class Order(models.Model):
     name = models.CharField(max_length=50)
     klass = models.ForeignKey(Klass)
@@ -63,7 +63,7 @@
     names = stringtree.split()
     models = [Domain, Kingdom, Phylum, Klass, Order, Family, Genus, Species]
     assert len(names) == len(models), (names, models)
-    
+
     parent = None
     for name, model in zip(names, models):
         try:


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to