Skip to content

Commit 4b722b3

Browse files
committed
Fixed django#16317 -- Fixed dumpdata for self-referencing models and natural keys
Thanks aldaran for the patch.
1 parent 19a810b commit 4b722b3

File tree

4 files changed

+7
-4
lines changed

4 files changed

+7
-4
lines changed

django/core/management/commands/dumpdata.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,11 @@ def sort_dependencies(app_list):
150150
for field in model._meta.fields:
151151
if hasattr(field.rel, 'to'):
152152
rel_model = field.rel.to
153-
if hasattr(rel_model, 'natural_key'):
153+
if hasattr(rel_model, 'natural_key') and rel_model != model:
154154
deps.append(rel_model)
155155
for field in model._meta.many_to_many:
156156
rel_model = field.rel.to
157-
if hasattr(rel_model, 'natural_key'):
157+
if hasattr(rel_model, 'natural_key') and rel_model != model:
158158
deps.append(rel_model)
159159
model_dependencies.append((model, deps))
160160

tests/regressiontests/fixtures_regress/fixtures/forward_ref_lookup.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,15 @@
1010
"pk": "2",
1111
"model": "fixtures_regress.store",
1212
"fields": {
13+
"main": null,
1314
"name": "Amazon"
1415
}
1516
},
1617
{
1718
"pk": "3",
1819
"model": "fixtures_regress.store",
1920
"fields": {
21+
"main": null,
2022
"name": "Borders"
2123
}
2224
},
@@ -29,4 +31,4 @@
2931
"stores": [["Amazon"], ["Borders"]]
3032
}
3133
}
32-
]
34+
]

tests/regressiontests/fixtures_regress/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ def get_by_natural_key(self, key):
9191
class Store(models.Model):
9292
objects = TestManager()
9393
name = models.CharField(max_length=255)
94+
main = models.ForeignKey('self', null=True)
9495

9596
class Meta:
9697
ordering = ('name',)

tests/regressiontests/fixtures_regress/tests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ def test_nk_on_serialize(self):
478478
)
479479
self.assertEqual(
480480
stdout.getvalue(),
481-
"""[{"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"]}}]"""
481+
"""[{"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"]}}]"""
482482
)
483483

484484
def test_dependency_sorting(self):

0 commit comments

Comments
 (0)