2010-10-19 64 views
0

我目前正在爲django項目編寫一個API,並使用django-piston來實現此目的。但是,我需要定製某些基類型序列化的方式。django-piston:覆蓋發射器中的默認序列化

更確切地說,我的模型是從一個特殊的Model類,它繼承django.db.models.base.ModelBase子類,但不能序列化爲普通Django模型......所以,我想重寫串行這個特殊的Model類的子類。

我不知道活塞嘛...我看過代碼,並且映射type->serializer(對於基類型)似乎是硬編碼的。

有誰知道是否有標準的方式來覆蓋它?

+0

「我的模型是從一個特殊的Model類繼承而來的......但不能序列化」您在創建「特殊」Model類時犯了一個可怕的錯誤。在你爲自己製造更多問題之前停下來。你不需要打破Django。把事情放回去讓Django工作。無論你如何破壞序列化,都是一個嚴重而昂貴的錯誤。做。不。做。那。 – 2010-10-19 10:16:21

+0

感謝您的諮詢!但是你應該對那些正在開發(或正在開發)這個庫的人說:http://opensource.bolloretelecom.eu/projects/django-ldapdb/ – sebpiq 2010-10-19 14:23:02

回答

1

好吧......我不能有它的工作,所以我把我寫我自己前一段時間一些代碼,使它更清潔,它結束行動的完整的Python序列化框架SpitEat。我已經開始編寫一些文檔,但這是一項正在進行中的工作。

我已經放棄使用活塞,因爲它不是第一次讓我失望,因爲它缺乏對(反)序列化操作的靈活性。

SpitEat的目標是完全可定製的,(通過從一個更抽象的角度看系列化不僅僅是「Django的對象」)和Django的,測試提供串行,但不能做到有據可查的是,與功能仍然失蹤(這又是一項正在進行的工作)。

1

你可以自己做序列化。處理程序只希望並返回一個python字典。儘管如此,你不能把它插入模型中。爲您的基本類型創建您自己的資源處理程序,它可以從字典構建模型。

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 
+0

是啊...我想過這個。但基本上,這意味着我必須自己重新編寫序列化! – sebpiq 2010-10-19 14:24:34

+0

@seb您使用的類不能通過您自己的語言順利地序列化。因此你必須自己做序列化。如果您有許多不同的類需要以相同的方式序列化,請使用您的所有特定處理程序派生的BaseModelHandler。然後你已經在一個地方捕獲了序列化。你必須自己動手,除非django-ldapdb人有一個序列化程序。 – 2010-10-20 04:31:27