django-piston:覆盖发射器中的默认序列化

时间:2010-10-19 08:26:33

标签: python django serialization django-piston

我目前正在为django项目编写API,并使用django-piston进行此操作。但是,我需要自定义某些基本类型的序列化方式。

更确切地说,我的模型是从一个特殊的Model类继承而来的,它继承自django.db.models.base.ModelBase,但不能被序列化为常规的django模型...因此,我想重写序列化程序此特殊Model类的所有子类。

我不太熟悉活塞......我看过代码,映射type->serializer(基本类型)似乎是硬编码的。

有人知道是否有一种标准方法可以覆盖它吗?

2 个答案:

答案 0 :(得分:1)

您可以自己进行序列化。处理程序只期望并返回一个python字典。尽管如此,您不能将其插入模型中。为您的基本类型创建自己的资源处理程序,它能够从dict构建您的模型。

class ModelHandler(HandlerBase):
    allowed_methods = ('Get',)

    def read(self, request, id=None):
        if id is not None:
            m = Model.objects.get(id=id)

        ret = {}
        ret['field'] = m.field

        return ret

答案 1 :(得分:1)

好的......我无法让它工作,所以我拿了一些我前段时间写过的代码,使它变得更干净,最终完成了一个完整的Python序列化框架SpitEat。我已经开始写一些文档,但这是一项正在进行的工作。

我已经放弃使用活塞,因为它不是第一次因为(de)序列化操作缺乏灵活性而让我失望。

SpitEat 旨在完全自定义(通过从更抽象的角度看待序列化,而不仅仅是“django对象”),并为Django提供序列化器,经过测试,但还没有很好地记录,以及仍然缺失的功能(同样是正在进行的工作)。