Ticket #15076: 15194-3.diff

File 15194-3.diff, 2.3 KB (added by claudep, 3 years ago)

Identical patch + updated test

  • django/core/management/commands/inspectdb.py

    diff --git a/django/core/management/commands/inspectdb.py b/django/core/management/commands/inspectdb.py
    index 8da0d7e..af2da45 100644
    a b class Command(NoArgsCommand): 
    4141        yield ''
    4242        yield 'from %s import models' % self.db_module
    4343        yield ''
     44        known_models = []
    4445        for table_name in connection.introspection.get_table_list(cursor):
    4546            yield 'class %s(models.Model):' % table2model(table_name)
     47            known_models.append(table2model(table_name))
    4648            try:
    4749                relations = connection.introspection.get_relations(cursor, table_name)
    4850            except NotImplementedError:
    class Command(NoArgsCommand): 
    8385
    8486                if i in relations:
    8587                    rel_to = relations[i][1] == table_name and "'self'" or table2model(relations[i][1])
    86                     field_type = 'ForeignKey(%s' % rel_to
     88
     89                    if rel_to in known_models:
     90                        field_type = 'ForeignKey(%s' % rel_to
     91                    else:
     92                        field_type = "ForeignKey('%s'" % rel_to
     93
    8794                    if att_name.endswith('_id'):
    8895                        att_name = att_name[:-3]
    8996                    else:
  • tests/regressiontests/inspectdb/tests.py

    diff --git a/tests/regressiontests/inspectdb/tests.py b/tests/regressiontests/inspectdb/tests.py
    index 944eb64..6896bf9 100644
    a b class InspectDBTestCase(TestCase): 
    1212        call_command('inspectdb', stdout=out)
    1313        error_message = "inspectdb generated an attribute name which is a python keyword"
    1414        self.assertNotIn("from = models.ForeignKey(InspectdbPeople)", out.getvalue(), msg=error_message)
    15         self.assertIn("from_field = models.ForeignKey(InspectdbPeople)", out.getvalue())
     15        # As InspectdbPeople model is defined after InspectdbMessage, it should be quoted
     16        self.assertIn("from_field = models.ForeignKey('InspectdbPeople')", out.getvalue())
    1617        self.assertIn("people_pk = models.ForeignKey(InspectdbPeople, primary_key=True)",
    1718            out.getvalue())
    1819        self.assertIn("people_unique = models.ForeignKey(InspectdbPeople, unique=True)",
Back to Top