web-dev-qa-db-fra.com

Erreur: "L'élément de séquence de mise à jour du dictionnaire n ° 0 a une longueur de 1; 2 sont requises" sur Django 1.4

J'ai un message d'erreur sur Django 1.4:

l'élément de séquence de mise à jour du dictionnaire n ° 0 a la longueur 1; 2 est requis

[MODIFIER]

C'est arrivé quand j'ai essayé d'utiliser une balise template comme `` {% for v in values%}:

dictionary update sequence element #0 has length 1; 2 is required

Request Method:     GET
Request URL:    ...
Django Version:     1.4.5
Exception Type:     ValueError
Exception Value:    

dictionary update sequence element #0 has length 1; 2 is required

Exception Location:     /usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py in __init__, line 21
Python Executable:  /usr/bin/uwsgi-core
Python Version:     2.7.3
Python Path:    

['/var/www/',
 '.',
 '',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PIL',
 '/usr/lib/pymodules/python2.7']

Server time:    sam, 13 Jul 2013 16:15:45 +0200
Error during template rendering

In template /var/www/templates/app/index.html, error at line 172
dictionary update sequence element #0 has length 1; 2 is required

172     {% for product in products %}

Traceback Switch to copy-and-paste view

/usr/lib/python2.7/dist-packages/Django/core/handlers/base.py in get_response

                            response = callback(request, *callback_args, **callback_kwargs)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/contrib/auth/decorators.py in _wrapped_view

                    return view_func(request, *args, **kwargs)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/views/decorators/http.py in inner

                return func(request, *args, **kwargs)

    ...
▶ Local vars
./app/views.py in index

            context_instance=RequestContext(request))

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/shortcuts/__init__.py in render_to_response

        return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/loader.py in render_to_string

            return t.render(context_instance)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/base.py in render

                return self._render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/base.py in _render

            return self.nodelist.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/base.py in render

                    bit = self.render_node(node, context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/debug.py in render_node

                return node.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/loader_tags.py in render

            return compiled_parent._render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/base.py in _render

            return self.nodelist.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/base.py in render

                    bit = self.render_node(node, context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/debug.py in render_node

                return node.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/loader_tags.py in render

                result = block.nodelist.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/base.py in render

                    bit = self.render_node(node, context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/debug.py in render_node

                return node.render(context)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/template/defaulttags.py in render

            len_values = len(values)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/core/paginator.py in __len__

            return len(self.object_list)

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/db/models/query.py in __len__

                    self._result_cache = list(self.iterator())

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/db/models/query.py in iterator

                        obj = model(*row[index_start:aggregate_start])

    ...
▶ Local vars
/usr/lib/python2.7/dist-packages/Django/db/models/base.py in __init__

                    setattr(self, field.attname, val)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py in __set__

                value = self.field._attribute_class(value, self.field, obj)

    ...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py in __init__

            super(HStoreDictionary, self).__init__(value, **params)

    ...
▶ Local vars

Cela arrive aussi lorsque j'essaie d'accéder à un jeu de requêtes hstore:

[modifier]

Traceback (most recent call last):
File "manage.py", line 14, in <module>
    execute_manager(settings)

File "/usr/local/lib/python2.7/dist-packages/Django/core/management/__init__.py", line 459, in execute_manager
    utility.execute()

File "/usr/local/lib/python2.7/dist-packages/Django/core/management/__init__.py", line 382, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)

File "/usr/local/lib/python2.7/dist-packages/Django/core/management/base.py", line 196, in run_from_argv
    self.execute(*args, **options.__dict__)

File "/usr/local/lib/python2.7/dist-packages/Django/core/management/base.py", line 232, in execute
    output = self.handle(*args, **options)

File "/home/name/workspace/project/app/data/commands/my_command.py", line 60, in handle
    item_id = tmp[0].id,

File "/usr/local/lib/python2.7/dist-packages/Django/db/models/query.py", line 207, in __getitem__
    return list(qs)[0]

File "/usr/local/lib/python2.7/dist-packages/Django/db/models/query.py", line 87, in __len__
    self._result_cache.extend(self._iter)

File "/usr/local/lib/python2.7/dist-packages/Django/db/models/query.py", line 301, in iterator
    obj = model(*row[index_start:aggregate_start])

File "/usr/local/lib/python2.7/dist-packages/Django/db/models/base.py", line 300, in __init__
    setattr(self, field.attname, val)

File "/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py", line 38, in __set__
    value = self.field._attribute_class(value, self.field, obj)

File "/usr/local/lib/python2.7/dist-packages/djorm_hstore/fields.py", line 21, in __init__
    super(HStoreDictionary, self).__init__(value, **params)

ValueError: dictionary update sequence element #0 has length 1; 2 is required

le code est:

tmp = Item.objects.where(HE("kv").contains({'key':value}))

if tmp.count() > 0:

    item_id = tmp[0].id,

J'essaie juste d'accéder à la valeur que je ne comprends pas le message "séquence de mise à jour". Lorsque j'utilise un curseur au lieu de hstore queryset, la fonction fonctionne. L'erreur vient aussi sur le rendu du template, je viens de redémarrer uwsgi et tout fonctionne bien, mais l'erreur revient plus tard

[modifier]

Quelqu'un a une idée?

115
user2575627

Je viens de rencontrer ce problème. Je ne sais pas si c'est la même chose qui frappe votre code, mais pour moi, la cause principale est parce que j'ai oublié de mettre name= sur le dernier argument de l'appel de la fonction url.

Par exemple, ce qui suit jette l'erreur de la question:

url(r'^foo/(?P<bar>[A-Za-z]+)/$', FooBar.as_view(), 'foo')

Mais cela fonctionne réellement:

url(r'^foo/(?P<bar>[A-Za-z]+)/$', FooBar.as_view(), name='foo')

La raison pour laquelle le traçage est inutile est qu’en interne Django veut analyser l’argument positional donné en tant que mot clé argument kwargs et qu’une chaîne est un itératif, un chemin de code atypique commence à se dérouler. Utilisez toujours name= sur vos URL!

310
Thane Brimhall

Une erreur dans votre question est générée lorsque vous essayez quelque chose comme suit:

>>> a_dictionary = {}
>>> a_dictionary.update([[1]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required

Il est difficile de dire où est la cause dans votre code, sauf si vous montrez votre code, une trace complète.

25
falsetru

J'ai fait face au problème mentionné ci-dessus lorsque j'ai oublié de passer un mot-clé argument name à url ().

Code avec erreur

 url(r"^testing/$", views.testing, "testing")

Code sans erreur

url(r"^testing/$", views.testing, name="testing")

J'ai donc finalement supprimé l'erreur ci-dessus de cette façon. Ce pourrait être quelque chose de différent dans votre cas. Alors vérifiez vos modèles d'URL dans urls.py .

11
hygull

J'ai eu cette erreur quand je m'amusais avec ficelle et dictionnaire.

dict1 = {'taras': 'vaskiv', 'iruna': 'vaskiv'}
str1 = str(dict1)
dict(str1)
*** ValueError: dictionary update sequence element #0 has length 1; 2 is required

Donc, ce que vous devez réellement faire pour obtenir le dict de string est:

dic2 = eval(str1)
dic2
{'taras': 'vaskiv', 'iruna': 'vaskiv'}
10
Taras Vaskiv

Voici l'erreur reproduite. 

>>> d = {}
>>> d.update([(1,)])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required
>>> 
>>> d
{}
>>> 
>>> d.update([(1, 2)])
>>> d
{1: 2}
>>> 
>>> d.update('hello_some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>  
ValueError: dictionary update sequence element #0 has length 1; 2 is required
>>> 

Si vous donnez la séquence et que la longueur de l'élément est égale à 1 et que vous en exigez deux, nous obtiendrons ce genre d'erreur. Voir le code ci-dessus. La première fois que j'ai donné la séquence avec Tuple et sa longueur 1, nous avons eu l'erreur et le dictionnaire n'a pas été mis à jour. la deuxième fois que j'ai donné à l'intérieur de Tuple avec deux éléments, le dictionnaire a été mis à jour.

9
naveen tamanam

J'ai eu le même problème et j'ai découvert que c'était dû à de mauvais paramètres . Dans views.py, j'ai utilisé: 

return render(request, 'demo.html',{'items', items})    

Mais j'ai trouvé le problème: {'items', items}. Le passage à {'items': items} a résolu le problème.

3
Binoy Babu

Dans mon cas, mon get_context_data dans l'une de mes vues renvoyait return render(self.request, 'es_connection_error.html', {'error':error}); dans un bloc try/catch au lieu de retourner context

2
shadi

L'erreur devrait être avec les params. Vérifiez que le paramètre est un objet dictionnaire . S'il ne s'agit que d'une liste/d'un groupe d'arguments, utilisez un * (*params) au lieu de deux * (**params). Cela fera exploser la liste/le nuplet dans la quantité appropriée d'arguments.

Ou, si les paramètres proviennent d'une autre partie du code sous forme de fichier JSON, veuillez effectuer json.loads(params), car les objets JSON se comportent parfois comme chaîne et vous devez donc le transformer en JSON en utilisant load from string (charges).

super(HStoreDictionary, self).__init__(value, **params)

J'espère que cela t'aides!

2
Midhun C Nair

J'ai rencontré ce problème lorsque j'ai essayé d'appeler la méthode de mise à jour avec un paramètre de type incorrect . Le dict attendu était le suivant:

{'foo': True}

Celui qui a été adopté était:

{'foo': "True"}

assurez-vous de vérifier que tous les paramètres que vous transmettez sont du type attendu.

1
Nick Kobishev

Vous envoyez un paramètre de manière incorrecte; ce devrait être un dictionary object:

  • Mauvais: func(a=r)

  • Correct: func(a={'x':y})

0
soField

C'est simplement un problème avec le format de données JSON. Rectifiez-le et vous avez terminé.

0
GaurZilla