我正在尝试从一个表单中执行Django数据库保存,我不必手动指定字段名(就像我在第二个代码块中那样),我尝试这样做的方式如下(第一个代码块)因为我得到了另一个SO的提示帖子。但是,当我尝试这个时,我得到错误“字典更新序列元素#0有长度4; 2是必需的”,我甚至尝试了它,如下所示,只有一个testdict字典,而不是request.POST,但我仍然得到错误..显然字段值很好,因为它在第二个代码块中工作,所以我很难过为什么会发生这种情况,如果有人能为我阐明这一点,我将不胜感激...谢谢
以这种方式尝试会产生错误:
testdict = {'name':'account_username','value':'vvvvvv'}
for name, value in testdict.iteritems():
if name != '' and name != 'top_select':
b = Twitter(**dict((name, value)))
b.save()
>>> dictionary update sequence element #0 has length 4; 2 is required
但这很好用:
b = Twitter(account_username='vvvvvv')
b.save()
答案 0 :(得分:1)
不确定你要做什么,但也许你想要这样的东西
b = Twitter(**{name: value})
但要获得相当于Twitter(account_username='vvvvvv')
的东西,你需要这样的东西
Twitter(**{testdict['name'], testdict['value']})
其中testdict只包含要发送到Twitter()
然后代码看起来更像是
test_twits = [{'name':'account_username','value':'vvvvvv'},
{'name':'account_username','value':'wwwwww'},
]
for twit in test_twits:
name = twit['name']
value = twit['value']
if name != '' and name != 'top_select':
b = Twitter(**{name: value})
b.save()
答案 1 :(得分:0)
如果我错了,请纠正我。
从第二个代码段开始,我认为Twitter
类需要account_username
作为关键字参数。当您使用iteritems
遍历字典时,您将name
- 即字典的键作为关键字参数传递给类。这不对吗?字典的键是name
和value
,_不是_ account_username
。我相信您需要将字典中的值作为关键字参数传递,而不是其中一个键。
答案 2 :(得分:0)
这样做:
dict(((name, value),))
'dict'采用一系列键值元组,而你给它一个键,值元组。
它说“...序列元素#0长度为4”的原因是因为来自testdict的键'name'的长度为4。