Feb 10, 2017 · Updated: Jul 12, 2021 · by Tim Kamanin
Django dumpdata command lets us export model objects as fixtures and to store them in json / xml formats.
All is good and works fine until you need to export a model that is a child of a concrete model and shares two database tables (one for parent another is for the model).
If you ever happen to export such a model, you'll notice that dumpdata command exports only child model data. Which is desired behavior in most cases.
But what if you need to get parent + child model data as a single json object?
Well, you may need to temporarily hack the core (naughty naughty!).
Here's how to do that: as of Django 1.10.5 you need to find a line number 84 in django/core/serializers/base.py file (here https://github.com/django/django/blob/1.10.5/django/core/serializers/base.py#L84) and you should see:
for field in concrete_model._meta.local_fields: # code goes here pass
change it to
for field in concrete_model._meta.fields: # code goes here pass
and voila, you model is now exported with a parent model data as a single JSON object.
Just don't forget to revert your code changes afterward, because hacking core is bad and you likely need to do this change for one-time operation.
However, If you need to use this approach on a constant basis, consider creating a custom serializer and applying your changes in it. You can find serializer examples here: https://github.com/django/django/tree/1.10.5/django/core/serializers.
Alright then, happy coding!
Hey, if you've found this useful, please share the post to help other folks find it: