Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse code

Fixed #15076 -- Quoted ForeignKey target class names in inspectdb whe…

…n class is defined below.

Thanks saschwarz for the report, jeff@deserettechnology.com for the initial patch and Ramiro Morales for the review. 


git-svn-id: http://code.djangoproject.com/svn/django/trunk@17942 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit ddc5d59c6a547f76797d99510df8c3cec61e5f89 1 parent c34d069
Claude Paroz authored April 27, 2012
9  django/core/management/commands/inspectdb.py
@@ -41,8 +41,10 @@ def handle_inspection(self, options):
41 41
         yield ''
42 42
         yield 'from %s import models' % self.db_module
43 43
         yield ''
  44
+        known_models = []
44 45
         for table_name in connection.introspection.get_table_list(cursor):
45 46
             yield 'class %s(models.Model):' % table2model(table_name)
  47
+            known_models.append(table2model(table_name))
46 48
             try:
47 49
                 relations = connection.introspection.get_relations(cursor, table_name)
48 50
             except NotImplementedError:
@@ -83,7 +85,12 @@ def handle_inspection(self, options):
83 85
 
84 86
                 if i in relations:
85 87
                     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
+
87 94
                     if att_name.endswith('_id'):
88 95
                         att_name = att_name[:-3]
89 96
                     else:
3  tests/regressiontests/inspectdb/tests.py
@@ -12,7 +12,8 @@ def test_attribute_name_not_python_keyword(self):
12 12
         call_command('inspectdb', stdout=out)
13 13
         error_message = "inspectdb generated an attribute name which is a python keyword"
14 14
         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())
16 17
         self.assertIn("people_pk = models.ForeignKey(InspectdbPeople, primary_key=True)",
17 18
             out.getvalue())
18 19
         self.assertIn("people_unique = models.ForeignKey(InspectdbPeople, unique=True)",

0 notes on commit ddc5d59

Please sign in to comment.
Something went wrong with that request. Please try again.