def test_json_serialize_deserialize_deleted_obj(): obj = Example.objects.create(name="test_name") obj_ref = ExampleReference.objects.create(name="refname", ref=obj) result = serialize_object_json(obj_ref, refs=["ref"]) expect_data = { "model": "tests.examplereference", "pk": obj_ref.id, "fields": {"name": "refname", "long_name": "", "ref": obj.id}, "refs": { "ref": { "model": "tests.example", "pk": obj.id, "fields": {"name": "test_name"}, "refs": {}, } }, } obj.delete() obj_ref.delete() assert json.loads(result) == expect_data obj_snapshot = deserialize_object_json(result) assert obj_ref.name == obj_snapshot.name assert obj_ref.ref.name == obj.name
def test_measurement_json_serialize_deserialize(): from tests.models import MeasurementModel obj = MeasurementModel.objects.create(height=Distance(cm=20.0)) result = serialize_object_json(obj) obj_snapshot = deserialize_object_json(result) assert obj_snapshot assert obj_snapshot.height == obj.height
def test_json_serialize_deserialize(): obj = Example.objects.create(name="test_name") obj_ref = ExampleReference.objects.create(name="refname", ref=obj) result = serialize_object_json(obj_ref, refs=["ref"]) obj_snapshot = deserialize_object_json(result) assert obj_ref.id == obj_snapshot.id assert obj_ref.name == obj_snapshot.name assert obj_ref.ref.name == obj.name
def test_json_serialize_deserialize_with_new_fields(): obj = Example.objects.create(name="test_name") obj_ref = ExampleReference.objects.create(name="refname", ref=obj) result = serialize_object_json(obj_ref, refs=["ref"]) result_dict = json.loads(result) # Maybe ref has been create after serialization del result_dict["fields"]["long_name"] result = json.dumps(result_dict) obj_snapshot = deserialize_object_json(result) assert obj_ref.id == obj_snapshot.id assert obj_ref.name == obj_snapshot.name assert obj_ref.ref.name == obj.name
def test_json_serialize_deserialize_with_non_existed_fields(): obj = Example.objects.create(name="test_name") obj_ref = ExampleReference.objects.create(name="refname", ref=obj) result = serialize_object_json(obj_ref, refs=["ref"]) result_dict = json.loads(result) # Unexisted fields and refs must be ignore result_dict["fields"]["slug"] = "removed field" result = json.dumps(result_dict) obj_snapshot = deserialize_object_json(result) assert obj_ref.id == obj_snapshot.id assert obj_ref.name == obj_snapshot.name assert obj_ref.ref.name == obj.name
def get_db_prep_value(self, value, connection, prepared=False): if value and not isinstance(value, models.Model): raise ValueError("Need model instance") if value is None: return None if isinstance(value, six.string_types): # maybe serialized return value model_class = value._meta.concrete_model opts = self.get_snapshot_opts(model_class) if PolymorphicModel is not None: if isinstance(value, PolymorphicModel): # hack for polymorphic model model_class._meta = copy.copy( model_class._meta) model_class._meta.local_fields = model_class._meta.fields return serialize_object_json(value, **opts)