Important Alert: It appears that you are using the old User / Profile methodology. Starting with Django 1.5, there are no separate user and user profile models. You must create your own user model and use it instead of the standard one: @Django Docs User User Profile
Serialization
I want to introduce you to a different approach to serializing and restoring models. All model objects can be serialized using the following snippet:
from django.core import serializers serialized_data = serializers.serialize("json", myInstance)
or serialize more than one object :
serialized_data = serializers.serialize("json", User.objects.all())
The foreign keys and m2m relationships are then stored in an identifier array.
If you want to serialize only a subset of fields :
serialized_data = serializers.serialize("json", myUserInstance, fields=('first_name ','last_name ','email ','password '))
To save a user profile, you just have to write:
serialized_data = serializers.serialize("json", myUserProfileInstance)
The user ID is stored in serialized data and looks like this:
{ "pk": 1, "model": "profile.UserProfile", "fields": { "bio": "self-taught couch potato", "user": 1 } }
If you want user related fields in serialization too, you need to change your user model:
class UserManager(models.Manager): def get_by_natural_key(self, first_name, last_name): return self.get(first_name=first_name, last_name=last_name) class User(models.Model): objects = UserManager() first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) ... def natural_key(self): return (self.first_name, self.last_name) class Meta: unique_together = (('first_name', 'last_name'),)
When serializing using natural keys, you need to add the use_natural_keys argument:
serialized_data = serializers.serialize("json", myUserProfileInstance, use_natural_keys=True)
This leads to the following conclusion:
{ "pk": 2, "model": "profile.UserProfile", "fields": { "bio": "time-traveling smartass", "user": ["Dr.", "Who"] } }
Deserialization
Deserializing and saving is as simple as:
for deserialized_object in serializers.deserialize("json", serialized_data): deserialized_object.save()
More information can be found in the Django docs: Serializing Django Objects