擅长:python、mysql、java
<p>对于解决此问题的更通用方法,可以通过在模型上使用简单的duck punch来避免模板,并使用ElementTree将任何深层对象图序列化为XML。</p>
<p>我是这样解决的:</p>
<p>Monkey patch/duck punch models in your Model.py喜欢</p>
<pre><code>if hasattr(models.Model, "to_element")==False:
import xml.etree.ElementTree as ET
def to_element(self):
ele = ET.Element(self.__class__.__name__)
for field in self._meta.fields:
ele.attrib[field.attname]=str(getattr(self,field.attname))
return ele
models.Model.to_element = to_element
</code></pre>
<p>这将向Model添加一个方法,该方法创建一个元素实例,其中包含您关心的模型中的字段,而不包含django cruft。</p>
<p>然后,要构造xml文档,请执行以下操作:</p>
<pre><code>dealer = Dealer.objects.get(id=dealer_id)
makes = DealerMake.objects.filter(dealer=dealer)
root = dealer.to_element()
for make in makes:
root.append(make.to_element())
xml = ET.tostring(root)
print xml
</code></pre>
<p>通过这种方法,您可以得到一个格式良好的xml文档,其中所有django模型字段都是属性,并构建一个n级的深层层次结构。每个xml节点都将被命名为与模型类相同的名称。</p>