summaryrefslogtreecommitdiff
path: root/django/db
diff options
context:
space:
mode:
authorQuentin Fulsher <qfulsher@gmail.com>2016-10-11 00:59:17 -0700
committerTim Graham <timograham@gmail.com>2016-11-22 10:14:10 -0500
commitf62abfc03da61977bf080163f0a2ef014decd86a (patch)
treee0b568cee8c2e3be45d9dcb2dc6cca2e53a36b47 /django/db
parent41759c908240409d44fc11d07a562268c81f4bdf (diff)
Fixed #27295 -- Added a system check to prohibit model names that start or end with an underscore or contain double underscores.
Diffstat (limited to 'django/db')
-rw-r--r--django/db/models/base.py30
1 files changed, 29 insertions, 1 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 1096a58b22..33c562138a 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -1265,7 +1265,11 @@ class Model(six.with_metaclass(ModelBase)):
errors.extend(cls._check_fields(**kwargs))
errors.extend(cls._check_m2m_through_same_relationship())
errors.extend(cls._check_long_column_names())
- clash_errors = cls._check_id_field() + cls._check_field_name_clashes()
+ clash_errors = (
+ cls._check_id_field() +
+ cls._check_field_name_clashes() +
+ cls._check_model_name_db_lookup_clashes()
+ )
errors.extend(clash_errors)
# If there are field name clashes, hide consequent column name
# clashes.
@@ -1470,6 +1474,30 @@ class Model(six.with_metaclass(ModelBase)):
return errors
@classmethod
+ def _check_model_name_db_lookup_clashes(cls):
+ errors = []
+ model_name = cls.__name__
+ if model_name.startswith('_') or model_name.endswith('_'):
+ errors.append(
+ checks.Error(
+ "The model name '%s' cannot start or end with an underscore "
+ "as it collides with the query lookup syntax." % model_name,
+ obj=cls,
+ id='models.E023'
+ )
+ )
+ elif LOOKUP_SEP in model_name:
+ errors.append(
+ checks.Error(
+ "The model name '%s' cannot contain double underscores as "
+ "it collides with the query lookup syntax." % model_name,
+ obj=cls,
+ id='models.E024'
+ )
+ )
+ return errors
+
+ @classmethod
def _check_index_together(cls):
""" Check the value of "index_together" option. """
if not isinstance(cls._meta.index_together, (tuple, list)):