| 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: |
|---|
| 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) |
|---|