2012-08-04 24 views
0

这是我的模型类Django的modelfield把数据递归在遍历XML标签

#!/usr/bin/python 

from django.db import models 

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

这是如何我试图同时从遍历XML数据就摆在值递归模型领域Django壳。

>>> 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数据中迭代的值。

回答

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() 
0

你需要为每一行做一个模型实例,但由于元素doest似乎是一个对象节点但平坦的列表的子元素,因此可以将这两个值保存为字典,然后在设置完成后保存模型。

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()如果在第二。

免责声明:您需要照顾像差像只有一个元素存在等

+0

看起来有点脆弱 - 如果没有评论,它不会被保存,但是如果它缺少一个customvar,并且有评论,它会保存最后一个customvar的值?等... – 2012-08-04 11:05:01

+0

@JonClements是的,我指着保存在循环中,而不是建议更好的XML解析。但是,在答案中增加了免责声明。 – Rohan 2012-08-04 11:12:05