diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py index 8acfde014c..a7252cf57d 100644 --- a/django/db/backends/__init__.py +++ b/django/db/backends/__init__.py @@ -520,6 +520,10 @@ class BaseDatabaseFeatures(object): # at the end of each save operation? supports_forward_references = True + # Does the backend uses proper method like 'truncate_name' + # to auto-truncate column names? + truncates_name = False + # Is there a REAL datatype in addition to floats/doubles? has_real_datatype = False supports_subqueries_in_group_by = True diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index 8bd7f04086..3f596ef425 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -107,6 +107,7 @@ class DatabaseFeatures(BaseDatabaseFeatures): supports_bitwise_or = False can_defer_constraint_checks = True supports_partially_nullable_unique_constraints = False + truncates_name = True has_bulk_insert = True supports_tablespaces = True supports_sequence_reset = False diff --git a/django/db/models/base.py b/django/db/models/base.py index 74bece1f5c..6c59c0038a 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -1469,7 +1469,7 @@ class Model(six.with_metaclass(ModelBase)): continue connection = connections[db] max_name_length = connection.ops.max_name_length() - if max_name_length is None: + if max_name_length is None or connection.features.truncates_name: continue else: if allowed_len is None: diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py index 8550dc3065..6bce3f9a26 100644 --- a/tests/invalid_models_tests/test_models.py +++ b/tests/invalid_models_tests/test_models.py @@ -18,7 +18,7 @@ def get_max_column_name_length(): for db in settings.DATABASES.keys(): connection = connections[db] max_name_length = connection.ops.max_name_length() - if max_name_length is None: + if max_name_length is None or connection.features.truncates_name: continue else: if allowed_len is None: