Django

Code

Changeset 7782

Show
Ignore:
Timestamp:
06/29/08 04:40:17 (2 months ago)
Author:
mtredinnick
Message:

Factored out a semi-complex if-test that was used in two places.

Files:

Legend:

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

    r7766 r7782  
    44from django.db import connection, transaction, IntegrityError 
    55from django.db.models.fields import DateField, FieldDoesNotExist 
    6 from django.db.models.query_utils import Q 
     6from django.db.models.query_utils import Q, select_related_descend 
    77from django.db.models import signals, sql 
    88from django.dispatch import dispatcher 
     
    762762    obj = klass(*row[index_start:index_end]) 
    763763    for f in klass._meta.fields: 
    764         if (not f.rel or (not restricted and f.null) or 
    765                 (restricted and f.name not in requested) or f.rel.parent_link): 
     764        if not select_related_descend(f, restricted, requested): 
    766765            continue 
    767766        if restricted: 
  • django/trunk/django/db/models/query_utils.py

    r7477 r7782  
    4949        return obj 
    5050 
     51def select_related_descend(field, restricted, requested): 
     52    """ 
     53    Returns True if this field should be used to descend deeper for 
     54    select_related() purposes. Used by both the query construction code 
     55    (sql.query.fill_related_selections()) and the model instance creation code 
     56    (query.get_cached_row()). 
     57    """ 
     58    if not field.rel: 
     59        return False 
     60    if field.rel.parent_link: 
     61        return False 
     62    if restricted and field.name not in requested: 
     63        return False 
     64    if not restricted and field.null: 
     65        return False 
     66    return True 
     67 
  • django/trunk/django/db/models/sql/query.py

    r7781 r7782  
    1616from django.db import connection 
    1717from django.db.models import signals 
     18from django.db.models.fields import FieldDoesNotExist 
     19from django.db.models.query_utils import select_related_descend 
    1820from django.db.models.sql.where import WhereNode, EverythingNode, AND, OR 
    1921from django.db.models.sql.datastructures import Count 
    20 from django.db.models.fields import FieldDoesNotExist 
    2122from django.core.exceptions import FieldError 
    2223from datastructures import EmptyResultSet, Empty, MultiJoin 
     
    916917 
    917918        for f, model in opts.get_fields_with_model(): 
    918             if (not f.rel or (restricted and f.name not in requested) or 
    919                     (not restricted and f.null) or f.rel.parent_link): 
     919            if not select_related_descend(f, restricted, requested): 
    920920                continue 
    921921            dupe_set = orig_dupe_set.copy()