Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #21097 - Added DatabaseFeature.can_introspect_autofield

  • Loading branch information...
commit c89d80e2cc9bf1f401aa3af4047bdc6f3dc5bfa4 1 parent 6feb751
@manfre manfre authored akaariai committed
View
7 django/core/management/commands/inspectdb.py
@@ -104,8 +104,11 @@ def handle_inspection(self, options):
# 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.
View
3  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
View
3  tests/inspectdb/tests.py
@@ -42,7 +42,8 @@ def assertFieldType(name, definition):
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
View
5 tests/introspection/tests.py
@@ -66,8 +66,9 @@ def test_get_table_description_types(self):
# 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
Please sign in to comment.
Something went wrong with that request. Please try again.