Django

Code

Changeset 654

Show
Ignore:
Timestamp:
09/19/05 22:46:11 (3 years ago)
Author:
adrian
Message:

Fixed #525 -- admin.list_filter now works with ManyToManyFields? whose primary keys are integers and are not called 'id'. Thanks for the bug report, nesh

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/views/admin/main.py

    r577 r654  
    200200                else: 
    201201                    lookup_title = f.verbose_name 
    202                 lookup_kwarg = '%s__id__exact' % f.name 
     202                lookup_kwarg = '%s__%s__exact' % (f.name, f.rel.to.pk.name) 
    203203                lookup_val = request.GET.get(lookup_kwarg, None) 
    204204                lookup_choices = f.rel.to.get_model_module().get_list() 
     
    209209                        get_query_string(params, {}, [lookup_kwarg]))) 
    210210                    for val in lookup_choices: 
     211                        pk_val = getattr(val, f.rel.to.pk.column) 
    211212                        filter_template.append('<li%s><a href="%s">%r</a></li>\n' % \ 
    212                             ((lookup_val == str(val.id) and ' class="selected"' or ''), 
    213                             get_query_string(params, {lookup_kwarg: val.id}), val)) 
     213                            ((lookup_val == str(pk_val) and ' class="selected"' or ''), 
     214                            get_query_string(params, {lookup_kwarg: pk_val}), val)) 
    214215                    filter_template.append('</ul>\n\n') 
    215216            # Field with choices. 
     
    917918            new_data.update(_get_flattened_data(f, getattr(obj, f.column))) 
    918919        for f in opts.many_to_many: 
     920            get_list_func = getattr(obj, 'get_%s_list' % f.rel.singular) 
    919921            if f.rel.raw_id_admin: 
    920                 new_data[f.name] = ",".join([str(i.id) for i in getattr(obj, 'get_%s_list' % f.rel.singular)()]) 
     922                new_data[f.name] = ",".join([str(getattr(i, f.rel.to.pk.column)) for i in get_list_func()]) 
    921923            elif not f.rel.edit_inline: 
    922                 new_data[f.name] = [i.id for i in getattr(obj, 'get_%s_list' % f.rel.singular)()] 
     924                new_data[f.name] = [getattr(i, f.rel.to.pk.column) for i in get_list_func()] 
    923925        for rel_obj, rel_field in inline_related_objects: 
    924926            var_name = rel_obj.object_name.lower()