Fixed #30980 -- Improved error message when checking uniqueness of admin actions' __name__.
Thanks Keshav Kumar for the initial patch.
This commit is contained in:
parent
e2d9d66a22
commit
8b3e714ecf
|
@ -1,3 +1,4 @@
|
|||
import collections
|
||||
from itertools import chain
|
||||
|
||||
from django.apps import apps
|
||||
|
@ -985,15 +986,20 @@ class ModelAdminChecks(BaseModelAdminChecks):
|
|||
|
||||
def _check_actions_uniqueness(self, obj):
|
||||
"""Check that every action has a unique __name__."""
|
||||
names = [name for _, name, _ in obj._get_base_actions()]
|
||||
if len(names) != len(set(names)):
|
||||
return [checks.Error(
|
||||
'__name__ attributes of actions defined in %s must be '
|
||||
'unique.' % obj.__class__,
|
||||
obj=obj.__class__,
|
||||
id='admin.E130',
|
||||
)]
|
||||
return []
|
||||
errors = []
|
||||
names = collections.Counter(name for _, name, _ in obj._get_base_actions())
|
||||
for name, count in names.items():
|
||||
if count > 1:
|
||||
errors.append(checks.Error(
|
||||
'__name__ attributes of actions defined in %s must be '
|
||||
'unique. Name %r is not unique.' % (
|
||||
obj.__class__.__name__,
|
||||
name,
|
||||
),
|
||||
obj=obj.__class__,
|
||||
id='admin.E130',
|
||||
))
|
||||
return errors
|
||||
|
||||
|
||||
class InlineModelAdminChecks(BaseModelAdminChecks):
|
||||
|
|
|
@ -633,7 +633,7 @@ with the admin site:
|
|||
* **admin.E129**: ``<modeladmin>`` must define a ``has_<foo>_permission()``
|
||||
method for the ``<action>`` action.
|
||||
* **admin.E130**: ``__name__`` attributes of actions defined in
|
||||
``<modeladmin>`` must be unique.
|
||||
``<modeladmin>`` must be unique. Name ``<name>`` is not unique.
|
||||
|
||||
``InlineModelAdmin``
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
|
@ -1441,9 +1441,8 @@ class ActionsCheckTests(CheckTestCase):
|
|||
|
||||
self.assertIsInvalid(
|
||||
BandAdmin, Band,
|
||||
"__name__ attributes of actions defined in "
|
||||
"<class 'modeladmin.test_checks.ActionsCheckTests."
|
||||
"test_actions_not_unique.<locals>.BandAdmin'> must be unique.",
|
||||
"__name__ attributes of actions defined in BandAdmin must be "
|
||||
"unique. Name 'action' is not unique.",
|
||||
id='admin.E130',
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue