Opened 19 years ago
Closed 19 years ago
#2334 closed defect (invalid)
Warning raised when list_filter contains a model method name
| Reported by: | Owned by: | Adrian Holovaty | |
|---|---|---|---|
| Component: | Core (Other) | Version: | |
| Severity: | normal | Keywords: | |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | no | Needs documentation: | no | 
| Needs tests: | no | Patch needs improvement: | no | 
| Easy pickings: | no | UI/UX: | no | 
Description
The Admin list_display property for one of my models contains a method name together with a few field names. Everything works ok, but the manage.py script displays the following warning:
Validating models... journals.article: "admin.list_filter" refers to 'get_short_title', which isn't a field. 1 error found.
A simple patch to management.py makes the warning go away, but I have no idea about possible side-effects:
Index: core/management.py
===================================================================
--- core/management.py	(revisione 3336)
+++ core/management.py	(copia locale)
@@ -946,7 +946,8 @@
                         try:
                             f = opts.get_field(fn)
                         except models.FieldDoesNotExist:
-                            e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn)
+                            if not callable(getattr(cls, fn)):
+                                e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn)
                         if fn not in opts.admin.list_display:
                             e.add(opts, '"admin.list_display_links" refers to %r, which is not defined in "admin.list_display".' % fn)
                 # list_filter
      Change History (2)
comment:1 by , 19 years ago
comment:2 by , 19 years ago
| Resolution: | → invalid | 
|---|---|
| Status: | new → closed | 
This behavior is correct. list_filter doesn't accept method names.
  Note:
 See   TracTickets
 for help on using tickets.
    
Grrr, the patch should be
Index: core/management.py =================================================================== --- core/management.py (revisione 3336) +++ core/management.py (copia locale) @@ -946,7 +946,8 @@ try: f = opts.get_field(fn) except models.FieldDoesNotExist: - e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn) + if not callable(getattr(cls, fn, None)): + e.add(opts, '"admin.list_filter" refers to %r, which isn\'t a field.' % fn) if fn not in opts.admin.list_display: e.add(opts, '"admin.list_display_links" refers to %r, which is not defined in "admin.list_display".' % fn) # list_filter