Bonjour a tous, sur une de mes pages, j'ai plusieurs formulaires, mais j'ai constater que si une des variables POST étais vide je recevais un message d'erreurs dans ce genre la :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Exception Type:      MultiValueDictKeyError
Exception Value:     
 
"Key 'id_album' not found in <QueryDict: {u'csrfmiddlewaretoken': [u'4ebc1bff327889fa70fb3ec58cd35dfd'], u'del': [u'69'], u'favo': [u'a'], u'delete': [u'']}>"
Donc si j'ai bien compris toute les variables POST doivent avoir une valeur par défaut dans les différents formulaire, pour que Django ne considère pas la variable comme inexistante.


J'ai essayer en mettant une valeur par défaut aux différentes variables POST, mais cette fois-ci je reçois un autres message d'erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Exception Type:      DoesNotExist
Exception Value:     
 
Collection matching query does not exist.

je vous met mes formulaires :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
<table class="tabResultAlbum" cellpadding="2" cellspacing="5" >
		{% for list in  list_album %}
		<tr>
 
			{% ifequal list.is_favourite 1 %}
			<form name="on" action="{% url libertyproject.imagin.views.view_album %}" method="post">
				{% csrf_token %}
				<td style="width: 5%"><input class="onAlbum" name="Album" type="submit" value="" /></td>
 
				<input type="hidden" name="id_album" value="{{list.id}}">
				<input type="hidden" name="favo" value="{{list.is_favourite}}">
 
				<!-- Champ par defaut -->
				<input type="hidden" name="del" value="0">
 
			</form>
 
			{% else %}
 
			<form name="off" action="{% url libertyproject.imagin.views.view_album %}" method="post">
				{% csrf_token %}
				<td style="width: 5%"><input class="offAlbum" name="Album" type="submit" value="" /></td>
 
				<input type="hidden" name="id_album" value="{{list.id}}">
				<input type="hidden" name="favo" value="{{list.is_favourite}}">
 
				<!-- Champ par defaut -->
				<input type="hidden" name="del" value="0">
 
			</form>
			{% endifequal %}
 
			<form name="del" action="{% url libertyproject.imagin.views.view_album %}" method="post">
				{% csrf_token %}
			<td style="width: 120px"><input onclick="if(verif()) return true; else return false;" class="delAlbum" name="delete" type="submit" value="" /></td>
 
			<input type="hidden" name="del" value="{{list.id}}">
 
			<!-- Champ par defaut -->
			<input type="hidden" name="favo" value="a">
			<input type="hidden" name="id_album" value="{{list.id}}">
			</form>
		</tr>
		{% endfor %}
 
	</table>

Mon traitement dans ma views :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
def view_album(request):
    if len(request.POST) > 0:
        if request.POST['del'] != '':
            id_album = request.POST['del']
            delete_album = Collection.objects.get(pk=id_album)
            delete_album.delete()
 
        if request.POST['favo'] != False: 
            id_album = request.POST['id_album']
            chang_fav_off = Collection.objects.get(pk=id_album)
            chang_fav_off.is_favourite = False
            chang_fav_off.save()
        elif request.POST['favo'] != True: 
            id_album = request.POST['id_album']
            chang_fav_on = Collection.objects.get(pk=id_album)
            chang_fav_on.is_favourite = True
            chang_fav_on.save()

Pour infos :

POST['del'] renvoi un id.

POST['id_album'] renvoi un id.

request.POST['favo'] renvoi un booléen.


Merci d'avance pour votre aide, c'est mon premier cas avec plusieurs variables POST avec plusieurs formulaire, je me perds....