Loading django/core/management/commands/inspectdb.py +7 −8 Original line number Diff line number Diff line from __future__ import unicode_literals import keyword import re from optparse import make_option from django.core.management.base import NoArgsCommand, CommandError Loading Loading @@ -142,17 +143,15 @@ class Command(NoArgsCommand): else: field_params['db_column'] = col_name if ' ' in new_name: new_name = new_name.replace(' ', '_') field_notes.append('Field renamed to remove spaces.') if '-' in new_name: new_name = new_name.replace('-', '_') field_notes.append('Field renamed to remove dashes.') new_name, num_repl = re.subn(r'\W', '_', new_name) if num_repl > 0: field_notes.append('Field renamed to remove unsuitable characters.') if new_name.find('__') >= 0: while new_name.find('__') >= 0: new_name = new_name.replace('__', '_') if col_name.lower().find('__') >= 0: # Only add the comment if the double underscore was in the original name field_notes.append("Field renamed because it contained more than one '_' in a row.") if new_name.startswith('_'): Loading tests/regressiontests/inspectdb/models.py +4 −1 Original line number Diff line number Diff line Loading @@ -20,8 +20,11 @@ class DigitsInColumnName(models.Model): leading_digit = models.CharField(max_length=11, db_column='4extra') leading_digits = models.CharField(max_length=11, db_column='45extra') class UnderscoresInColumnName(models.Model): class SpecialColumnName(models.Model): field = models.IntegerField(db_column='field') # Underscores field_field_0 = models.IntegerField(db_column='Field_') field_field_1 = models.IntegerField(db_column='Field__') field_field_2 = models.IntegerField(db_column='__field') # Other chars prc_x = models.IntegerField(db_column='prc(%) x') tests/regressiontests/inspectdb/tests.py +5 −2 Original line number Diff line number Diff line Loading @@ -59,8 +59,10 @@ class InspectDBTestCase(TestCase): self.assertNotIn(" 45extra = models.CharField", output, msg=error_message) self.assertIn("number_45extra = models.CharField", output) def test_underscores_column_name_introspection(self): """Introspection of column names containing underscores (#12460)""" def test_special_column_name_introspection(self): """Introspection of column names containing special characters, unsuitable for Python identifiers """ out = StringIO() call_command('inspectdb', stdout=out) output = out.getvalue() Loading @@ -68,3 +70,4 @@ class InspectDBTestCase(TestCase): self.assertIn("field_field = models.IntegerField(db_column='Field_')", output) self.assertIn("field_field_0 = models.IntegerField(db_column='Field__')", output) self.assertIn("field_field_1 = models.IntegerField(db_column='__field')", output) self.assertIn("prc_x = models.IntegerField(db_column='prc(%) x')", output) Loading
django/core/management/commands/inspectdb.py +7 −8 Original line number Diff line number Diff line from __future__ import unicode_literals import keyword import re from optparse import make_option from django.core.management.base import NoArgsCommand, CommandError Loading Loading @@ -142,17 +143,15 @@ class Command(NoArgsCommand): else: field_params['db_column'] = col_name if ' ' in new_name: new_name = new_name.replace(' ', '_') field_notes.append('Field renamed to remove spaces.') if '-' in new_name: new_name = new_name.replace('-', '_') field_notes.append('Field renamed to remove dashes.') new_name, num_repl = re.subn(r'\W', '_', new_name) if num_repl > 0: field_notes.append('Field renamed to remove unsuitable characters.') if new_name.find('__') >= 0: while new_name.find('__') >= 0: new_name = new_name.replace('__', '_') if col_name.lower().find('__') >= 0: # Only add the comment if the double underscore was in the original name field_notes.append("Field renamed because it contained more than one '_' in a row.") if new_name.startswith('_'): Loading
tests/regressiontests/inspectdb/models.py +4 −1 Original line number Diff line number Diff line Loading @@ -20,8 +20,11 @@ class DigitsInColumnName(models.Model): leading_digit = models.CharField(max_length=11, db_column='4extra') leading_digits = models.CharField(max_length=11, db_column='45extra') class UnderscoresInColumnName(models.Model): class SpecialColumnName(models.Model): field = models.IntegerField(db_column='field') # Underscores field_field_0 = models.IntegerField(db_column='Field_') field_field_1 = models.IntegerField(db_column='Field__') field_field_2 = models.IntegerField(db_column='__field') # Other chars prc_x = models.IntegerField(db_column='prc(%) x')
tests/regressiontests/inspectdb/tests.py +5 −2 Original line number Diff line number Diff line Loading @@ -59,8 +59,10 @@ class InspectDBTestCase(TestCase): self.assertNotIn(" 45extra = models.CharField", output, msg=error_message) self.assertIn("number_45extra = models.CharField", output) def test_underscores_column_name_introspection(self): """Introspection of column names containing underscores (#12460)""" def test_special_column_name_introspection(self): """Introspection of column names containing special characters, unsuitable for Python identifiers """ out = StringIO() call_command('inspectdb', stdout=out) output = out.getvalue() Loading @@ -68,3 +70,4 @@ class InspectDBTestCase(TestCase): self.assertIn("field_field = models.IntegerField(db_column='Field_')", output) self.assertIn("field_field_0 = models.IntegerField(db_column='Field__')", output) self.assertIn("field_field_1 = models.IntegerField(db_column='__field')", output) self.assertIn("prc_x = models.IntegerField(db_column='prc(%) x')", output)