Commit e61cc871 authored by Michael Manfre's avatar Michael Manfre Committed by Tim Graham
Browse files

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

parent abb10db0
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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 += ', '
+23 −1
Original line number Diff line number Diff line
@@ -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