Vous n'êtes pas identifié(e).
Bonjour,
Je développe sous Django et j'ai un problème pour réaliser un formulaire de modification de certaines données présentes dans la base.
Voici le code pour le formulaire:
models.py
class Formulaire(models.Model):
depart=models.CharField(max_length=10)
views.py
def recherche(request):
if request.method == 'POST':
recherche_form = RechercheForm(request.POST)
Reponse = request.POST.get('depart')
Id= Ville.objects.get(ville=Reponse).id
if recherche_form.is_valid():
depart = recherche_form.cleaned_data['depart']
resultat = Formulaire.objects.filter(depart_id=Id)
#Affichage de la page "resultat_recherche"
return render(request, 'blabla/resultat_recherche.html', {'resultat_recherche': resultat})
else:
recherche_form = RechercheForm()
return render(request, 'blabla/recherche.html', {'recherche_form': recherche_form})
Voici le code que j'ai réalisé pour mon formulaire de modification, mais qui ne marche pas
from django.core.urlresolvers import reverse
def modifFormulaire(request,id):
if request.method == 'POST':
form = Formulaire(instance=Formulaire, data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('blabla/offre'))
else:
form = Formulaire(instance=Formulaire)
return render_to_response('blabla/modif_offre.html', {'form': form, })
Merci à vous
Hors ligne
Qu'est-ce qui ne marche pas ? Cela plante et fait un 500 ? la base n'est pas modifiée ? Ton formulaire n'est jamais valide ?
Hors ligne
Bonjour,
Je m'aperçois que le formulaire indiqué n'était pas le bon, le voici:
def modifFormulaire(request,id):
if request.method == 'POST':
form = Formulaire(instance=Formulaire, data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('offre'))
return HttpResponseRedirect('blabla/offre')
else:
form = Formulaire()
return render_to_response('blabla/modif_offre.html', {'form': form, })
Il est appelé via:
<td><a href="modif_offre/{{ formulaire.id }}">{{ ' modif' }}</a></td>
et
url(r'^modif_offre/(?P<id>[0-9]+)', views.modifFormulaire, name='modif_offre'),
Le message d'erreur que j'ai:
Reverse for 'modif_offre' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['blabla/modif_offre/(?P<id>[0-9]+)']
Plus particulièrement sur la ligne: {% url "modif_offre" %}
modif_offre.html
{% extends "blabla/base.html" %}
<!--Block qui permet d'afficher le menu de la page -accueil--->
{% block content %}
<form action="{% url "modif_offre" %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{% endblock %}
Merci
voici le co
Hors ligne
il faut donner l'id avec le reverse, sinon ça ne marchera pas.
Hors ligne
Merci,
Mais au risque de passer pour un nul, je ne comprend pas la réponse, en effet, normalement l'id est passé via cette ligne
<td><a href="modif_offre/{{ formulaire.id }}">{{ ' modif' }}</a></td>
et
url(r'^modif_offre/(?P<id>[0-9]+)', views.modifFormulaire, name='modif_offre'),
Vraiment désolé
merci
Hors ligne
il y a une confusion entre l'url qui est bien donnée ici et le reverse du HttpResponseRedirect qui lui pose souci.
Hors ligne
Bonjour,
J'ai modifier légèrement mon code, mais j'ai toujours une/des erreurs, différentes cette fois ci:
voici mon code:
def modifFormulaire(request,id):
question = Formulaire.objects.all().filter(id=id)
if request.method == 'POST':
form = FormulaireForm(instance=question, data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('modif_offre.html'))
#return HttpResponseRedirect('blabla/modif_offre.html')
else:
form = Formulaire()
return render('blabla/modif_offre.html', {'form': form, })
Et voici les message d'erreur:
TemplateDoesNotExist at /blabla/modif_offre/36
{'form': <Formulaire: Formulaire object>}
Template-loader postmortem
Django tried loading these templates, in this order:
Using loader django.template.loaders.filesystem.Loader:
C:\Python27\Lib\site-packages\Django-1.8-py2.7.egg\django\bin\covoiturage\templates\{'form': <Formulaire: Formulaire object>} (File does not exist)
Using loader django.template.loaders.app_directories.Loader:
C:\Python27\lib\site-packages\django-1.8-py2.7.egg\django\contrib\admin\templates\{'form': <Formulaire: Formulaire object>} (File does not exist)
C:\Python27\lib\site-packages\django-1.8-py2.7.egg\django\contrib\auth\templates\{'form': <Formulaire: Formulaire object>} (File does not exist)
Merci
Hors ligne
L'erreur si dessus s'affiche si je commente les lignes suivantes dans models.py
def __unicode__(self): # Python 3: def __str__(self):
return str(self.depart)
Si celles-ci ne sont pas commentées, j'ai l'erreur suivante qui s'affiche:
RelatedObjectDoesNotExist at /blabla/modif_offre/36
Formulaire has no depart.
Hors ligne
Salut,
J'ai un peu progressé, voici le code pour modifier le formulaire:
def modifFormulaire(request,id):
if request.POST:
book = Formulaire.objects.get(id=id)
form = FormulaireForm(request.POST,instance = book)
if form.is_valid():
form.save()
return redirect('/offre/')
else:
book = Formulaire.objects.get(id = id)
form = FormulaireForm(instance = book)
return render_to_response('blabla/modif_offre.html',{ 'form':form }, context_instance=RequestContext(request))
Celui-ci fonctionne, mais je n'arrive pas à afficher le formulaire sur ma page modif_offre.html. En effet, si je laisse:
<form action="{% url 'modif_offre' %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
J'ai une erreur, cependant, si je rajoute, le numéro de l'id à modifier dans la première ligne:
<form action="{% url 'modif_offre' 36 %}" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
La page de mon formulaire s'affiche normalement avec les valeurs dans les champs.
Mon souci est de pouvoir placer le numéro de l'ID dans la première ligne.
Dans le dossier urls.py, j'ai
url(r'^modif_offre/(?P<id>[0-9]+)', views.modifFormulaire, name='modif_offre'),
Si je mets:
<form action="{% url 'modif_offre' formulaire.id %}" method="post">
J'ai un message d'erreur
Merci
Hors ligne
Salut,
Je progresse, j'ai trouver pour mon probleme d'ID, il fallait faire comme cela:
<form action="modif_offre/{{ form.id }}" method="post">
et pour ne pas avoir de souci lors de la validation du formulaire, il faut mettre:
return redirect('/blabla/offre/')
Hors ligne
Mieux vaut choisir la forme:
<form action="{% url 'modif_offre' formulaire.id %}" method="post">
mais étant donné ton dernier exemple, il faut que tu remplaces formulaire par form.
Hors ligne
En faite, j'ai mis:
<form action="{{ form.id }}" method="post">
car si je mets:
<form action="{% url 'modif_offre' form.id %}" method="post">
j'ai un message d'erreur
Dernière modification par cobra85 (06-06-2015 13:02:14)
Hors ligne