Django Serializers可以序列化非Django类/对象

时间:2013-08-21 08:20:56

标签: xml django serialization xmlserializer django-serializer

我想使用Django序列化对自定义标签进行XML序列化,并从它只使用对象(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序列化程序能否以节省时间的方式执行此操作(或类似操作)?

1 个答案:

答案 0 :(得分: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))