summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Manfre <mmanfre@gmail.com>2013-09-12 10:03:29 -0400
committerAnssi Kääriäinen <anssi.kaariainen@thl.fi>2013-09-14 09:48:59 +0300
commitc89d80e2cc9bf1f401aa3af4047bdc6f3dc5bfa4 (patch)
tree99ebc4210e5e3def22396937b217e99f863bcb0f
parent6feb75129f42fdac751d0b79a2a005b4c0ad5c2d (diff)
Fixed #21097 - Added DatabaseFeature.can_introspect_autofield
-rw-r--r--django/core/management/commands/inspectdb.py7
-rw-r--r--django/db/backends/__init__.py3
-rw-r--r--tests/inspectdb/tests.py3
-rw-r--r--tests/introspection/tests.py5
4 files changed, 13 insertions, 5 deletions
diff --git a/django/core/management/commands/inspectdb.py b/django/core/management/commands/inspectdb.py
index b4c116acab..89549dc3c1 100644
--- a/django/core/management/commands/inspectdb.py
+++ b/django/core/management/commands/inspectdb.py
@@ -104,8 +104,11 @@ class Command(NoArgsCommand):
# Don't output 'id = meta.AutoField(primary_key=True)', because
# that's assumed if it doesn't exist.
- if att_name == 'id' and field_type == 'AutoField(' and extra_params == {'primary_key': True}:
- continue
+ if att_name == 'id' and extra_params == {'primary_key': True}:
+ if field_type == 'AutoField(':
+ continue
+ elif field_type == 'IntegerField(' and not connection.features.can_introspect_autofield:
+ comment_notes.append('AutoField?')
# Add 'null' and 'blank', if the 'null_ok' flag was present in the
# table description.
diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py
index d22fea5ec2..44024c5349 100644
--- a/django/db/backends/__init__.py
+++ b/django/db/backends/__init__.py
@@ -627,6 +627,9 @@ class BaseDatabaseFeatures(object):
# which can't do it for MyISAM tables
can_introspect_foreign_keys = True
+ # Can the backend introspect an AutoField, instead of an IntegerField?
+ can_introspect_autofield = False
+
# Support for the DISTINCT ON clause
can_distinct_on_fields = False
diff --git a/tests/inspectdb/tests.py b/tests/inspectdb/tests.py
index d6f6e478e4..302db29e5d 100644
--- a/tests/inspectdb/tests.py
+++ b/tests/inspectdb/tests.py
@@ -42,7 +42,8 @@ class InspectDBTestCase(TestCase):
out_def = re.search(r'^\s*%s = (models.*)$' % name, output, re.MULTILINE).groups()[0]
self.assertEqual(definition, out_def)
- assertFieldType('id', "models.IntegerField(primary_key=True)")
+ if not connection.features.can_introspect_autofield:
+ assertFieldType('id', "models.IntegerField(primary_key=True) # AutoField?")
assertFieldType('big_int_field', "models.BigIntegerField()")
if connection.vendor == 'mysql':
# No native boolean type on MySQL
diff --git a/tests/introspection/tests.py b/tests/introspection/tests.py
index 6f38439945..8ec3d39903 100644
--- a/tests/introspection/tests.py
+++ b/tests/introspection/tests.py
@@ -66,8 +66,9 @@ class IntrospectionTests(TestCase):
# field type on MySQL
self.assertEqual(
[datatype(r[1], r) for r in desc],
- ['IntegerField', 'CharField', 'CharField', 'CharField',
- 'BigIntegerField', 'BinaryField' if connection.vendor != 'mysql' else 'TextField']
+ ['AutoField' if connection.features.can_introspect_autofield else 'IntegerField',
+ 'CharField', 'CharField', 'CharField', 'BigIntegerField',
+ 'BinaryField' if connection.vendor != 'mysql' else 'TextField']
)
# The following test fails on Oracle due to #17202 (can't correctly