From 2cb50f935aa70e91dd6c2f253becd636a2eb6fb7 Mon Sep 17 00:00:00 2001 From: Jacek Bzdak Date: Fri, 6 Nov 2015 17:29:23 +0100 Subject: Fixed #25274 --- Made inspectdb handle renamed fields in unique_together. --- tests/inspectdb/models.py | 9 ++++++++- tests/inspectdb/tests.py | 16 ++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/inspectdb/models.py b/tests/inspectdb/models.py index f7d365b868..ff2fbd6c09 100644 --- a/tests/inspectdb/models.py +++ b/tests/inspectdb/models.py @@ -72,6 +72,13 @@ class ColumnTypes(models.Model): class UniqueTogether(models.Model): field1 = models.IntegerField() field2 = models.CharField(max_length=10) + from_field = models.IntegerField(db_column='from') + non_unique = models.IntegerField(db_column='non__unique_column') + non_unique_0 = models.IntegerField(db_column='non_unique__column') class Meta: - unique_together = ('field1', 'field2') + unique_together = [ + ('field1', 'field2'), + ('from_field', 'field1'), + ('non_unique', 'non_unique_0'), + ] diff --git a/tests/inspectdb/tests.py b/tests/inspectdb/tests.py index db55d68493..06eb2c82f8 100644 --- a/tests/inspectdb/tests.py +++ b/tests/inspectdb/tests.py @@ -234,10 +234,18 @@ class InspectDBTestCase(TestCase): table_name_filter=lambda tn: tn.startswith('inspectdb_uniquetogether'), stdout=out) output = out.getvalue() - self.assertIn( - " unique_together = (('field1', 'field2'),)", output, - msg='inspectdb should generate unique_together.' - ) + unique_re = re.compile(r'.*unique_together = \((.+),\).*') + unique_together_match = re.findall(unique_re, output) + # There should be one unique_together tuple. + self.assertEqual(len(unique_together_match), 1) + fields = unique_together_match[0] + # Fields with db_column = field name. + self.assertIn("('field1', 'field2')", fields) + # Fields from columns whose names are Python keywords. + self.assertIn("('field1', 'field2')", fields) + # Fields whose names normalize to the same Python field name and hence + # are given an integer suffix. + self.assertIn("('non_unique_column', 'non_unique_column_0')", fields) @skipUnless(connection.vendor == 'sqlite', "Only patched sqlite's DatabaseIntrospection.data_types_reverse for this test") -- cgit v1.3