diff --git a/django/db/backends/mysql/operations.py b/django/db/backends/mysql/operations.py index ddeb128d32..fd7b8153ba 100644 --- a/django/db/backends/mysql/operations.py +++ b/django/db/backends/mysql/operations.py @@ -18,6 +18,8 @@ class DatabaseOperations(BaseDatabaseOperations): 'PositiveIntegerField': (0, 4294967295), } cast_data_types = { + 'AutoField': 'signed integer', + 'BigAutoField': 'signed integer', 'CharField': 'char(%(max_length)s)', 'TextField': 'char', 'IntegerField': 'signed integer', diff --git a/django/db/backends/oracle/operations.py b/django/db/backends/oracle/operations.py index 923b5d118d..62830476bf 100644 --- a/django/db/backends/oracle/operations.py +++ b/django/db/backends/oracle/operations.py @@ -52,6 +52,8 @@ END; # Oracle doesn't support string without precision; use the max string size. cast_char_field_without_max_length = 'NVARCHAR2(2000)' cast_data_types = { + 'AutoField': 'NUMBER(11)', + 'BigAutoField': 'NUMBER(19)', 'TextField': cast_char_field_without_max_length, } diff --git a/django/db/backends/postgresql/operations.py b/django/db/backends/postgresql/operations.py index 80a28bce46..400f014a42 100644 --- a/django/db/backends/postgresql/operations.py +++ b/django/db/backends/postgresql/operations.py @@ -8,6 +8,10 @@ from django.db.backends.base.operations import BaseDatabaseOperations class DatabaseOperations(BaseDatabaseOperations): cast_char_field_without_max_length = 'varchar' explain_prefix = 'EXPLAIN' + cast_data_types = { + 'AutoField': 'integer', + 'BigAutoField': 'bigint', + } def unification_cast_sql(self, output_field): internal_type = output_field.get_internal_type() diff --git a/tests/db_functions/test_cast.py b/tests/db_functions/test_cast.py index d66bec302f..7cc6bdce0d 100644 --- a/tests/db_functions/test_cast.py +++ b/tests/db_functions/test_cast.py @@ -39,6 +39,8 @@ class CastTests(TestCase): def test_cast_to_integer(self): for field_class in ( + models.AutoField, + models.BigAutoField, models.IntegerField, models.BigIntegerField, models.SmallIntegerField,