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
示例#2
0
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
示例#6
0
    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)