gpt4 book ai didi

python - Django 字符串索引必须是整数,而不是 str

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:35 25 4
gpt4 key购买 nike

使用表单创建 xml 请求并接收 xml 响应,如下所示:

<Root>
<Header>
<information>info</information>
</Header>
<Main>
<Product>
<Name>name1</Name>
<Description>description1</Description>
<Price>1</Price>
<Pictures>
<Picture>url_1</Picture>
<Picture>url_2</Picture>
</Pictures>
</Product>
</Main>
</Root>

然后使用这个函数将 xml 数据转换为字典:

from xml.etree import cElementTree as ET
from collections import defaultdict

def etree_to_dict(t):
d = {t.tag: {} if t.attrib else None}
children = list(t)
if children:
dd = defaultdict(list)
for dc in map(etree_to_dict, children):
for k, v in dc.iteritems():
dd[k].append(v)
d = {t.tag: {k:v[0] if len(v) == 1 else v for k, v in dd.iteritems()}}
if t.attrib:
d[t.tag].update(('@' + k, v) for k, v in t.attrib.iteritems())
if t.text:
text = t.text.strip()
if children or t.attrib:
if text:
d[t.tag]['#text'] = text
else:
d[t.tag] = text
return d

e = ET.XML('''
<Root>
<Header>
<information>info</information>
</Header>
<Main>
<Product>
<Name>name1</Name>
<Description>description1</Description>
<Price>1</Price>
<Pictures>
<Picture>url_1</Picture>
<Picture>url_2</Picture>
</Pictures>
</Product>
</Main>
</Root>
''')

并将其存储到数据库:

from pprint import pprint
d = etree_to_dict(e)

pprint(d)
d = etree_to_dict(e)

product = d['Root']['Main']['Product']
r = Product.objects.create()
r.name = product['Name']
r.description = product['Description']
r.price = product['Price']
r.save()

一切都很好。但是当我尝试将图片保存到数据库时:

product_pictures=d['Root']['Main']['Pictures']
for m in product_pictures:
p = ProductPictures(
picture = m['Picture']
)
p.product = r
p.save()
r.productpictures_set.all()

我遇到了 TypeError 字符串索引必须是整数,而不是字符串 picture = m['Picture'] 上的 str。为什么会发生这种情况?我做错了什么。谢谢您的回答。

这是我的模型:

class Product(models.Model):
name = models.CharField(max_length=200, blank=True, null=True)
description = models.TextField(max_length=2000, blank=True, null=True)
price = models.CharField(max_length=10, blank=True, null=True)

class ProductPictures(models.Model):
product = models.ForeignKey(Product, null=True)
picture = models.CharField(max_length=200, blank=True, null=True)

更新:这是来自本地变量的数据:

product_pictures

{'Picture': [{'#text': 'http://images.static.goglobal.travel/images/hotels/67862/2010113161131438.jpg',
'@Description': ''},
{'#text': 'http://images.static.goglobal.travel/images/hotels/67862/2010113161132187.jpg',
'@Description': ''},
{'#text': 'http://images.static.goglobal.travel/images/hotels/67862/2010113161132406.jpg',
'@Description': ''}]}

m

'Picture'
d

{'Root': {'Header': {'Information': '1521337'},
'Main': {'Name': 'name1',
'Price': '1',
'Description': 'description',
'Pictures': {'Picture': [{'#text': 'http://images.static.goglobal.travel/images/hotels/67862/2010113161131438.jpg',
'@Description': ''},
{'#text': 'http://images.static.goglobal.travel/images/hotels/67862/2010113161132187.jpg',
'@Description': ''},
{'#text': 'http://images.static.goglobal.travel/images/hotels/67862/2010113161132406.jpg',
'@Description': ''}]},
'RoomFacilities': None}}}

最佳答案

产品图片是一个对象/字典,具有单个图片键,因此迭代它没有意义。您只需迭代Picture即可。

for m in product_pictures.get('Picture'):
p = ProductPictures(
picture = m.get('#text')
)

尽管我怀疑树字典的创建存在问题,可能值得进一步调试。

关于python - Django 字符串索引必须是整数,而不是 str,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37317744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com