31 """ |
31 """ |
32 self.options = options |
32 self.options = options |
33 |
33 |
34 self.stream = options.get("stream", StringIO()) |
34 self.stream = options.get("stream", StringIO()) |
35 self.selected_fields = options.get("fields") |
35 self.selected_fields = options.get("fields") |
|
36 self.use_natural_keys = options.get("use_natural_keys", False) |
36 |
37 |
37 self.start_serialization() |
38 self.start_serialization() |
38 for obj in queryset: |
39 for obj in queryset: |
39 self.start_object(obj) |
40 self.start_object(obj) |
40 for field in obj._meta.local_fields: |
41 for field in obj._meta.local_fields: |
150 def __init__(self, obj, m2m_data=None): |
151 def __init__(self, obj, m2m_data=None): |
151 self.object = obj |
152 self.object = obj |
152 self.m2m_data = m2m_data |
153 self.m2m_data = m2m_data |
153 |
154 |
154 def __repr__(self): |
155 def __repr__(self): |
155 return "<DeserializedObject: %s>" % smart_str(self.object) |
156 return "<DeserializedObject: %s.%s(pk=%s)>" % ( |
|
157 self.object._meta.app_label, self.object._meta.object_name, self.object.pk) |
156 |
158 |
157 def save(self, save_m2m=True): |
159 def save(self, save_m2m=True, using=None): |
158 # Call save on the Model baseclass directly. This bypasses any |
160 # Call save on the Model baseclass directly. This bypasses any |
159 # model-defined save. The save is also forced to be raw. |
161 # model-defined save. The save is also forced to be raw. |
160 # This ensures that the data that is deserialized is literally |
162 # This ensures that the data that is deserialized is literally |
161 # what came from the file, not post-processed by pre_save/save |
163 # what came from the file, not post-processed by pre_save/save |
162 # methods. |
164 # methods. |
163 models.Model.save_base(self.object, raw=True) |
165 models.Model.save_base(self.object, using=using, raw=True) |
164 if self.m2m_data and save_m2m: |
166 if self.m2m_data and save_m2m: |
165 for accessor_name, object_list in self.m2m_data.items(): |
167 for accessor_name, object_list in self.m2m_data.items(): |
166 setattr(self.object, accessor_name, object_list) |
168 setattr(self.object, accessor_name, object_list) |
167 |
169 |
168 # prevent a second (possibly accidental) call to save() from saving |
170 # prevent a second (possibly accidental) call to save() from saving |