Django

Code

Changeset 5921

Show
Ignore:
Timestamp:
08/17/07 20:19:25 (1 year ago)
Author:
russellm
Message:

Fixed #5196 -- Merged over changes to validation.py that didn't get merged correctly in [5918].

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/newforms-admin/django/core/management/validation.py

    r5918 r5921  
    4949                except ImportError: 
    5050                    e.add(opts, '"%s": To use ImageFields, you need to install the Python Imaging Library. Get it at http://www.pythonware.com/products/pil/ .' % f.name) 
    51             if f.prepopulate_from is not None and type(f.prepopulate_from) not in (list, tuple): 
    52                 e.add(opts, '"%s": prepopulate_from should be a list or tuple.' % f.name) 
    5351            if f.choices: 
    5452                if not hasattr(f.choices, '__iter__'): 
     
    136134        # Check admin attribute. 
    137135        if opts.admin is not None: 
    138             if not isinstance(opts.admin, models.AdminOptions): 
    139                 e.add(opts, '"admin" attribute, if given, must be set to a models.AdminOptions() instance.') 
    140             else: 
    141                 # list_display 
    142                 if not isinstance(opts.admin.list_display, (list, tuple)): 
    143                     e.add(opts, '"admin.list_display", if given, must be set to a list or tuple.') 
    144                 else: 
    145                     for fn in opts.admin.list_display: 
    146                         try: 
    147                             f = opts.get_field(fn) 
    148                         except models.FieldDoesNotExist: 
    149                             if not hasattr(cls, fn): 
    150                                 e.add(opts, '"admin.list_display" refers to %r, which isn\'t an attribute, method or property.' % fn) 
    151                         else: 
    152                             if isinstance(f, models.ManyToManyField): 
    153                                 e.add(opts, '"admin.list_display" doesn\'t support ManyToManyFields (%r).' % fn) 
    154                 # list_display_links 
    155                 if opts.admin.list_display_links and not opts.admin.list_display: 
    156                     e.add(opts, '"admin.list_display" must be defined for "admin.list_display_links" to be used.') 
    157                 if not isinstance(opts.admin.list_display_links, (list, tuple)): 
    158                     e.add(opts, '"admin.list_display_links", if given, must be set to a list or tuple.') 
    159                 else: 
    160                     for fn in opts.admin.list_display_links: 
    161                         try: 
    162                             f = opts.get_field(fn) 
    163                         except models.FieldDoesNotExist: 
    164                             if not hasattr(cls, fn): 
    165                                 e.add(opts, '"admin.list_display_links" refers to %r, which isn\'t an attribute, method or property.' % fn) 
    166                         if fn not in opts.admin.list_display: 
    167                             e.add(opts, '"admin.list_display_links" refers to %r, which is not defined in "admin.list_display".' % fn) 
    168                 # list_filter 
    169                 if not isinstance(opts.admin.list_filter, (list, tuple)): 
    170                     e.add(opts, '"admin.list_filter", if given, must be set to a list or tuple.') 
    171                 else: 
    172                     for fn in opts.admin.list_filter: 
    173                         try: 
    174                             f = opts.get_field(fn) 
    175                         except models.FieldDoesNotExist: 
    176                             e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn) 
    177                 # date_hierarchy 
    178                 if opts.admin.date_hierarchy: 
     136            # prepopulated_fields 
     137            if not isinstance(opts.admin.prepopulated_fields, dict): 
     138                e.add(opts, '"%s": prepopulated_fields should be a dictionary.' % f.name) 
     139            else: 
     140                for field_name, field_list in opts.admin.prepopulated_fields.items(): 
     141                    if not isinstance(field_list, (list, tuple)): 
     142                        e.add(opts, '"%s": prepopulated_fields "%s" value should be a list or tuple.' % (f.name, field_name)) 
     143 
     144            # list_display 
     145            if not isinstance(opts.admin.list_display, (list, tuple)): 
     146                e.add(opts, '"admin.list_display", if given, must be set to a list or tuple.') 
     147            else: 
     148                for fn in opts.admin.list_display: 
    179149                    try: 
    180                         f = opts.get_field(opts.admin.date_hierarchy
     150                        f = opts.get_field(fn
    181151                    except models.FieldDoesNotExist: 
    182                         e.add(opts, '"admin.date_hierarchy" refers to %r, which isn\'t a field.' % opts.admin.date_hierarchy) 
     152                        if not hasattr(cls, fn): 
     153                            e.add(opts, '"admin.list_display" refers to %r, which isn\'t an attribute, method or property.' % fn) 
     154                    else: 
     155                        if isinstance(f, models.ManyToManyField): 
     156                            e.add(opts, '"admin.list_display" doesn\'t support ManyToManyFields (%r).' % fn) 
     157            # list_display_links 
     158            if opts.admin.list_display_links and not opts.admin.list_display: 
     159                e.add(opts, '"admin.list_display" must be defined for "admin.list_display_links" to be used.') 
     160            if not isinstance(opts.admin.list_display_links, (list, tuple)): 
     161                e.add(opts, '"admin.list_display_links", if given, must be set to a list or tuple.') 
     162            else: 
     163                for fn in opts.admin.list_display_links: 
     164                    try: 
     165                        f = opts.get_field(fn) 
     166                    except models.FieldDoesNotExist: 
     167                        if not hasattr(cls, fn): 
     168                            e.add(opts, '"admin.list_display_links" refers to %r, which isn\'t an attribute, method or property.' % fn) 
     169                    if fn not in opts.admin.list_display: 
     170                        e.add(opts, '"admin.list_display_links" refers to %r, which is not defined in "admin.list_display".' % fn) 
     171            # list_filter 
     172            if not isinstance(opts.admin.list_filter, (list, tuple)): 
     173                e.add(opts, '"admin.list_filter", if given, must be set to a list or tuple.') 
     174            else: 
     175                for fn in opts.admin.list_filter: 
     176                    try: 
     177                        f = opts.get_field(fn) 
     178                    except models.FieldDoesNotExist: 
     179                        e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn) 
     180            # date_hierarchy 
     181            if opts.admin.date_hierarchy: 
     182                try: 
     183                    f = opts.get_field(opts.admin.date_hierarchy) 
     184                except models.FieldDoesNotExist: 
     185                    e.add(opts, '"admin.date_hierarchy" refers to %r, which isn\'t a field.' % opts.admin.date_hierarchy) 
    183186 
    184187        # Check ordering attribute.