Commit 4b722b31 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #16317 -- Fixed dumpdata for self-referencing models and natural keys

Thanks aldaran for the patch.
parent 19a810b1
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -150,11 +150,11 @@ def sort_dependencies(app_list):
            for field in model._meta.fields:
                if hasattr(field.rel, 'to'):
                    rel_model = field.rel.to
                    if hasattr(rel_model, 'natural_key'):
                    if hasattr(rel_model, 'natural_key') and rel_model != model:
                        deps.append(rel_model)
            for field in model._meta.many_to_many:
                rel_model = field.rel.to
                if hasattr(rel_model, 'natural_key'):
                if hasattr(rel_model, 'natural_key') and rel_model != model:
                    deps.append(rel_model)
            model_dependencies.append((model, deps))

+3 −1
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@
        "pk": "2",
        "model": "fixtures_regress.store",
        "fields": {
            "main": null,
            "name": "Amazon"
        }
    },
@@ -17,6 +18,7 @@
        "pk": "3",
        "model": "fixtures_regress.store",
        "fields": {
            "main": null,
            "name": "Borders"
        }
    },
+1 −0
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ class TestManager(models.Manager):
class Store(models.Model):
    objects = TestManager()
    name = models.CharField(max_length=255)
    main = models.ForeignKey('self', null=True)

    class Meta:
        ordering = ('name',)
+1 −1
Original line number Diff line number Diff line
@@ -478,7 +478,7 @@ class NaturalKeyFixtureTests(TestCase):
        )
        self.assertEqual(
            stdout.getvalue(),
            """[{"pk": 2, "model": "fixtures_regress.store", "fields": {"name": "Amazon"}}, {"pk": 3, "model": "fixtures_regress.store", "fields": {"name": "Borders"}}, {"pk": 4, "model": "fixtures_regress.person", "fields": {"name": "Neal Stephenson"}}, {"pk": 1, "model": "fixtures_regress.book", "fields": {"stores": [["Amazon"], ["Borders"]], "name": "Cryptonomicon", "author": ["Neal Stephenson"]}}]"""
            """[{"pk": 2, "model": "fixtures_regress.store", "fields": {"main": null, "name": "Amazon"}}, {"pk": 3, "model": "fixtures_regress.store", "fields": {"main": null, "name": "Borders"}}, {"pk": 4, "model": "fixtures_regress.person", "fields": {"name": "Neal Stephenson"}}, {"pk": 1, "model": "fixtures_regress.book", "fields": {"stores": [["Amazon"], ["Borders"]], "name": "Cryptonomicon", "author": ["Neal Stephenson"]}}]"""
        )

    def test_dependency_sorting(self):