Django/Python使用iteritems()更新数据库时出现奇怪的错误:“dictionary update sequence element#0的长度为4;需要2”

2024-05-14 13:53:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从一个表单中保存Django数据库,在那里我不必手动指定字段名(就像我在第二个代码块中所做的那样),我尝试这样做的方式如下(第一个代码块),正如我从另一个S.O.帖子中得到的提示一样。但是,当我尝试这样做时,我得到了一个错误“dictionary update sequence element#0的长度为4;需要2”,我甚至尝试了,如下所示,只使用一个testdict字典,而不是请求.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

但这很好:

^{pr2}$

Tags: django代码name数据库表单dictionaryvalue错误
3条回答

只要这样做:

dict(((name, value),))

“dict”接受一系列键、值元组,而您给它一个键,值元组。在

上面写着“。。。序列元素0的长度为4是因为testdict中的键“name”的长度为4。在

不知道你想做什么,但也许你想要这样的东西

b = Twitter(**{name: value})

但是要得到Twitter(account_username='vvvvvv')的等价物,您需要这样的东西

^{pr2}$

其中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()

如果我错了,请纠正我。在

从第二个代码片段中,我认为Twitter类需要account_username作为关键字参数。当您使用iteritems遍历字典时,您将把name-即字典的键作为关键字参数传递给类。这不是不对吗?字典的键是namevalue,而不是account_username。我相信您需要字典中的值之一作为关键字参数传递,而不是其中一个键。在

相关问题 更多 >

    热门问题