Dump (Export) Django data ========================= In docs: * /ref/django-admin.html#dumpdata * /topics/serialization.html#topics-serialization-natural-keys Dumping ------- Syntax:: django-admin dumpdata --output=outputfile.json --indent=2 [app_label[.ModelName] [app_label[.ModelName] ...]] We generally want to use natural keys, so add:: --natural-foreign --natural-primary And in each model, we need to add support for that. First, add a ``natural_key`` method that returns a tuple whose value uniquely identifies the record without using the pk:: def natural_key(self): return (self.task.label, self.url) Next, create a custom manager with a ``get_by_natural_key`` method that takes that tuple as ``*args`` and returns the corresponding record:: class TaskLinkManager(models.Manager): def get_by_natural_key(self, task_label, url): return self.get(task__label=task_label, url=url) class TaskLink(models.Model): # ... objects = TaskLinkManager() Finally, consider whether using get_by_natural_key will require that some other model be restored first. If so, we need to declare dependencies so restoration can occur in the right order. E.g.:: def natural_key(self): return (self.task.label, self.url) natural_key.dependencies = ["appname.Model1", "appname.Model2"] Compressing dumps ----------------- Dumps can be big but they compress very well and can be restored without uncompressing, e.g. with bzip2:: $ bzip2 bigdump.json $ python manage.py loaddata bigdump.json.bz2