129 votes

Comment changer un QueryDict de django en Dict de Python ?

Imaginons que j'ai le QueryDict suivant :

<QueryDict: {u'num': [0], u'var1': [u'value1', u'value2'], u'var2': [u'8']}>

J'aimerais avoir un dictionnaire à partir de cela, par exemple :

{'num': [0], 'var1':['value1', 'value2'], 'var2':['8']}

(Je ne me soucie pas de savoir si le symbole unicode u reste ou part).

Si je le fais queryDict.dict() comme le suggère le site django je perds les valeurs supplémentaires appartenant à var1 par exemple :

{'num': [0], 'var1':['value2'], 'var2':['8']}

Je pensais faire ça :

myDict = {}
for key in queryDict.iterkeys():
    myDict[key] = queryDict.getlist(key)

Y a-t-il un meilleur moyen ?

234voto

panchicore Points 3288

112voto

Cela devrait fonctionner : myDict = dict(queryDict.iterlists())

16voto

leo-the-manic Points 1145

C'est ce que j'ai fini par utiliser :

def qdict_to_dict(qdict):
    """Convert a Django QueryDict to a Python dict.

    Single-value fields are put in directly, and for multi-value fields, a list
    of all values is stored at the field's key.

    """
    return {k: v[0] if len(v) == 1 else v for k, v in qdict.lists()}

D'après mon utilisation, cela semble vous permettre d'obtenir une liste que vous pouvez renvoyer à un constructeur de formulaire, par exemple.

EDITAR: peut-être que ce n'est pas la meilleure méthode. Il semble que si vous voulez, par exemple, écrire QueryDict à un fichier pour n'importe quelle raison folle, QueryDict.urlencode() est la voie à suivre. Pour reconstruire le QueryDict vous faites simplement QueryDict(urlencoded_data) .

8voto

ytyng Points 409
from django.utils import six 
post_dict = dict(six.iterlists(request.POST))

8voto

omkar yadav Points 327

Il suffit d'ajouter

queryDict=dict(request.GET) ou queryDict=dict(QueryDict)

Dans votre vue et les données seront sauvegardées dans querDict comme Dict python.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X