2013-08-21 152 views
0

我想用自定義標記XML序列化使用Django序列化的對象,並從事實上它只使用對象(Django對象)..是否有可能通過它定製了非Django對象,我只指定了需要傳遞的標籤。Can Django序列化程序序列化非Django類/對象

這是可能的,或者我問錯了問題。

在此先感謝!

- 編輯 -

由於什麼,我想作爲一個輸入一個例子:

class market(object): 

    def __init__(self,): 
     self.grocery = self.GROCERY 
     self.electronics = self.ELECTRONICS 

    def GROCERY(self,): 

     self.item1 = "banana" 
     self.item2 = "tomato" 
     self.item3 = "apple" 

    def ELECTRONICS(self,): 

     self.item1 = "laptop" 
     self.item2 = "camera" 
     self.item3 = "mobile" 

現在我想序列化對象到XML,並返回它作爲一個響應的網頁,這樣的(作爲一個例子):

from django.serializers import serialize 

data = serialize("xml", market) 

,這是預期的輸出:

<?xml version="1.0" encoding="utf-8"?> 
<market> 
    <grocery> 
    <item1>banana</item1> 
    <item2>toamato</item2> 
    <item3>apple</item3> 
    </grocery> 

    <electronics> 
    <item1>laptop</item1> 
    <item2>camera</item2> 
    <item3>mobile</item3> 
    </electronics> 
</market> 

django序列化程序能以簡單節省時間的方式執行此操作嗎(或類似操作)嗎?

+0

你能不能給可能輸入目標和預期結果的一個例子嗎? – mariodev

+0

嗨,編輯已添加到我的問題,請看看 – securecurve

回答

1

我想我明白了,只要你實例化類,我不知道你要轉換的類或對象:

import inspect 
from xml.etree.ElementTree import Element, tostring 


def obj_to_xml(obj): 
    elem = Element(obj.__class__.__name__) 
    for name, method in inspect.getmembers(obj, inspect.ismethod): 
     if name in obj.__dict__.keys(): 
      child = Element(name) 
      method() 
      for gname in method.__code__.co_names: 
       gchild = Element(gname) 
       gchild.text = str(obj.__dict__[gname]) 
       child.append(gchild) 

      elem.append(child) 

    return elem 

market = Market() 
print '<?xml version="1.0" encoding="utf-8"?>%s' % tostring(obj_to_xml(market)) 
+0

似乎是一個不錯的主意..如果你不介意,我會根據你的代碼在github上啓動一個項目)。對不起,遲到了..有點忙。 – securecurve