Django

Code

Changeset 8690

Show
Ignore:
Timestamp:
08/28/08 21:40:50 (3 months ago)
Author:
mtredinnick
Message:

Fixed #7823 -- Fixed an edge case in RelatedField?.get_db_prep_lookup() so that
it works correctly with custom field subclasses. Patch from Ivan Sagalaev.

Files:

Legend:

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

    r8616 r8690  
    126126            # the primary key may itself be an object - so we need to keep drilling 
    127127            # down until we hit a value that can be used for a comparison. 
    128             v = valu
     128            v, field = value, Non
    129129            try: 
    130130                while True: 
    131                     v = getattr(v, v._meta.pk.name) 
     131                    v, field = getattr(v, v._meta.pk.name), v._meta.pk 
    132132            except AttributeError: 
    133133                pass 
     134            if field: 
     135                if lookup_type in ('range', 'in'): 
     136                    v = [v] 
     137                v = field.get_db_prep_lookup(lookup_type, v) 
     138                if isinstance(v, list): 
     139                    v = v[0] 
    134140            return v 
    135141 
     
    139145        if lookup_type == 'exact': 
    140146            return [pk_trace(value)] 
    141         if lookup_type == 'in'
     147        if lookup_type in ('range', 'in')
    142148            return [pk_trace(v) for v in value] 
    143149        elif lookup_type == 'isnull':