这是我的模特课
#!/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'
我得到的只是在模型中输入了一行。 如何在modelfields中的xml数据中获取所有迭代的值。
答案 0 :(得分: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()
答案 1 :(得分:0)
你需要为每一行做一个模型实例,但由于元素似乎是对象节点的子节点而是平面列表,你可以将这两个值保存到一个字典中,然后在设置两者后保存模型。 / p>
答案 2 :(得分:0)
假设您已在XML中修复了'custom_var_4'
和'comments'
元素的订单并且两者都存在,您可以改进代码:
>>> 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()
在第二个if。
免责声明:您需要注意像只有一个元素存在的像差等。