0

这是我的模型课

#!/usr/bin/python

from django.db import models

class olWS(models.Model):
    country=models.CharField(max_length=4)
    comment=models.TextField()

这就是我尝试在模型字段中递归地输入值的方式,同时从 django shell 迭代 xml 数据。

>>> from ol.models import olWS
>>> import xml.etree.cElementTree as ET
>>> tree=ET.ElementTree(file='data1')
>>> ws=olWS()
>>> for el in tree.iter():
...     if el.tag=='cusotm_var4':
...         ws.country=el.text
...     if el.tag=='comments':
...         ws.comment=el.text
...
>>> ws.save()
>>> ws.id
1
>>> ws.country
'US'
>>> ws.comment
'where are my cds i ordered'

我得到的只是模型中输入的一行。如何在模型字段中获取 xml 数据中迭代的所有值。

4

3 回答 3

1

您需要在循环中创建并保存您的实例;您只是在示例中的循环中分配值。

for el in tree.iter():
    ws = olWS()
    ws.country = el.text if el.tag == 'custom_var4' else ''
    ws.comment = el.text if el.tag == 'comments' else ''
    ws.save()
于 2012-08-04T12:01:32.253 回答
0

您需要为每一行做一个模型实例,但由于元素似乎不是对象节点的子节点而是平面列表,您可以将两个值保存到 dict 中,然后在两者都设置后保存模型。

于 2012-08-04T10:48:36.753 回答
0

假设您在 XML 中固定了 order of'custom_var_4''comments'elements 并且两者都存在,您可以将代码改进为:

>>> for el in tree.iter():
...     if el.tag=='cusotm_var4':
...         ws.country=el.text
...     if el.tag=='comments':
...         ws.comment=el.text
...         ws.save()

注意:ws.save()在第二个如果。

免责声明:您需要注意像只有一个元素存在等异常。

于 2012-08-04T11:02:05.440 回答