Je possède ce dictionnaire dans mon applications fichier modèle:(re) Utilisation des dictionnaires dans les vues django
TYPE_DICT = (
("1", "Shopping list"),
("2", "Gift Wishlist"),
("3", "test list type"),
)
modèle
, qui utilise ce dict est la suivante:
class List(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=200)
type = models.PositiveIntegerField(choices=TYPE_DICT)
Je veux réutiliser dans mes vues et l'a importé de apps.models. Je crée une liste de dictioneries à utiliser à mon avis comme celui-ci:
bunchofdicts = List.objects.filter(user=request.user)
array = []
for dict in bunchofdicts:
ListDict = {'Name':dict.name, 'type':TYPE_DICT[dict.type], 'edit':'placeholder' }
array.append(ListDict)
Quand j'utilise cette liste dans mon modèle, alors il me donne des résultats très étranges. Au lieu de me renvoyer le type de la liste (liste de courses) il me renvoie ('2', 'Liste de cadeaux'). Donc je peux comprendre ce qu'il fait (dans ce cas, le dict.type est égal à 1, et il devrait me renvoyer "shopping list", mais il me renvoie [1] - second, élément dans la liste). Ce que je ne comprends pas, pourquoi faire exactement la même chose dans un shell python donne des résultats différents.
le faire comme je le fais dans django (TYPE_DICT [dict.type]), fonctionne comme décrit ci-dessus et crée une erreur dans le shell python. en utilisant TYPE_DICT [str (dict.type)] dans la coquille de python fonctionne très bien, mais crée cette erreur dans django:
TypeError at /list/
tuple indices must be integers, not str
Request Method: GET
Request URL: http://127.0.0.1/list/
Exception Type: TypeError
Exception Value:
tuple indices must be integers, not str
Exception Location: /home/projects/tst/list/views.py in list, line 22
Python Executable: /usr/bin/python
Python Version: 2.6.2
Peut-être que je l'ai fait quelque chose de mal ou différent shell python. Qu'est-ce que j'ai fait était:
python
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> dict = {'1':'shoppinglist', '2':'giftlist','3':'testlist'}
>>> print dict[1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1
>>> print dict[str(1)]
shoppinglist
>>> x = 1
>>> print dict[x]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1
>>> print dict[str(x)]
shoppinglist
>>>
alors quel est le problème ici?
Alan
Merci. C'est exactement ce que j'ai réalisé dès que je suis allé au lit: P –