summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorRigel Di Scala <rigel.discala@propylon.com>2014-10-14 14:10:27 +0100
committerLoic Bistuer <loic.bistuer@gmail.com>2014-10-17 00:36:43 +0700
commite8262b59418d68d55a97a25567e4bc4f078ed3cb (patch)
tree832d3d71c88c2e74faf2d0c252a79f5f7aa1e393 /django
parentb729ef0bda5009389da7e3a5498dc1f6233761d6 (diff)
[1.7.x] Fixed #23615 -- Validate that a Model instance's "check" attribute is a method.
The "check" name is a reserved word used by Django's check framework, and cannot be redefined as something else other than a method, or the check framework will raise an error. This change amends the django.core.checks.model_check.check_all_models() function, so that it verifies that a model instance's attribute "check" is actually a method. This new check is assigned the id "models.E020". Conflicts: docs/ref/checks.txt Backport of a5c77417a6 from master
Diffstat (limited to 'django')
-rw-r--r--django/core/checks/model_checks.py33
1 files changed, 24 insertions, 9 deletions
diff --git a/django/core/checks/model_checks.py b/django/core/checks/model_checks.py
index 3f5a36b41b..3d0d56af58 100644
--- a/django/core/checks/model_checks.py
+++ b/django/core/checks/model_checks.py
@@ -1,28 +1,43 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
-from itertools import chain
+import inspect
import types
from django.apps import apps
-
-from . import Error, Tags, register
+from django.core.checks import Error, Tags, register
@register(Tags.models)
def check_all_models(app_configs=None, **kwargs):
- errors = [model.check(**kwargs)
- for model in apps.get_models()
- if app_configs is None or model._meta.app_config in app_configs]
- return list(chain(*errors))
+ errors = []
+ for model in apps.get_models():
+ if app_configs is None or model._meta.app_config in app_configs:
+ if not inspect.ismethod(model.check):
+ errors.append(
+ Error(
+ "The '%s.check()' class method is "
+ "currently overridden by %r." % (
+ model.__name__, model.check),
+ hint=None,
+ obj=model,
+ id='models.E020'
+ )
+ )
+ else:
+ errors.extend(model.check(**kwargs))
+ return errors
@register(Tags.models, Tags.signals)
def check_model_signals(app_configs=None, **kwargs):
- """Ensure lazily referenced model signals senders are installed."""
+ """
+ Ensure lazily referenced model signals senders are installed.
+ """
+ # Avoid circular import
from django.db import models
- errors = []
+ errors = []
for name in dir(models.signals):
obj = getattr(models.signals, name)
if isinstance(obj, models.signals.ModelSignal):