Fixed #21090 -- Allowed backends to provide dotted field path to inspectdb.

This commit is contained in:
Michael Manfre 2013-09-11 11:12:56 -04:00 committed by Tim Graham
parent abb10db06f
commit e61cc87129
2 changed files with 29 additions and 2 deletions

View File

@ -117,7 +117,12 @@ class Command(NoArgsCommand):
if not field_type in ('TextField(', 'CharField('):
extra_params['null'] = True
field_desc = '%s = models.%s' % (att_name, field_type)
field_desc = '%s = %s%s' % (
att_name,
# Custom fields will have a dotted path
'' if '.' in field_type else 'models.',
field_type,
)
if extra_params:
if not field_desc.endswith('('):
field_desc += ', '

View File

@ -2,7 +2,7 @@
from __future__ import unicode_literals
import re
from unittest import expectedFailure
from unittest import expectedFailure, skipUnless
from django.core.management import call_command
from django.db import connection
@ -162,3 +162,25 @@ class InspectDBTestCase(TestCase):
output = out.getvalue()
self.longMessage = False
self.assertIn(" managed = False", output, msg='inspectdb should generate unmanaged models.')
@skipUnless(connection.vendor == 'sqlite',
"Only patched sqlite's DatabaseIntrospection.data_types_reverse for this test")
def test_custom_fields(self):
"""
Introspection of columns with a custom field (#21090)
"""
out = StringIO()
orig_data_types_reverse = connection.introspection.data_types_reverse
try:
connection.introspection.data_types_reverse = {
'text': 'myfields.TextField',
'bigint': 'BigIntegerField',
}
call_command('inspectdb',
table_name_filter=lambda tn: tn.startswith('inspectdb_columntypes'),
stdout=out)
output = out.getvalue()
self.assertIn("text_field = myfields.TextField()", output)
self.assertIn("big_int_field = models.BigIntegerField()", output)
finally:
connection.introspection.data_types_reverse = orig_data_types_reverse