Ticket #4009: admin_list_filter.diff

File admin_list_filter.diff, 2.0 KB (added by simon@…, 18 years ago)
  • core/management.py

     
    927927    from django.db import models, connection
    928928    from django.db.models.loading import get_app_errors
    929929    from django.db.models.fields.related import RelatedObject
     930    from django.db.models.query import LOOKUP_SEPARATOR
    930931
    931932    e = ModelErrorCollection(outfile)
    932933
     
    10771078                    e.add(opts, '"admin.list_filter", if given, must be set to a list or tuple.')
    10781079                else:
    10791080                    for fn in opts.admin.list_filter:
     1081                        # Break the entry up using the lookup separator, and
     1082                        # make sure each one points to a valid field.
     1083                        field_lookups = fn.split(LOOKUP_SEPARATOR)
    10801084                        try:
    1081                             f = opts.get_field(fn)
     1085                            f = opts.get_field(field_lookups[0])
     1086                            if len(field_lookups) > 1:
     1087                                if not f.rel:
     1088                                    e.add(opts, '"admin.list_filter" refers to %r, which contains a non-related field.' % fn)
     1089                                for field_name in field_lookups[1:]:
     1090                                    model = f.rel.to
     1091                                    f = model._meta.get_field(field_name)
     1092                                    if not f.rel:
     1093                                        e.add(opts, '"admin.list_filter" refers to %r, which contains a non-related field.' % fn)
    10821094                        except models.FieldDoesNotExist:
    1083                             e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn)
     1095                            if not hasattr(cls, field_lookups[0]):
     1096                                e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn)
    10841097                # date_hierarchy
    10851098                if opts.admin.date_hierarchy:
    10861099                    try:
Back to Top