last day (14 days later) » 

2:06 PM
Hi Mathias
 
Are you english or can we speak in French ?
 
Si t’es plus à l’aise en Français, y’a pas de problèmes
Même si je suis pas sûr que ce soit une très bonne idée, vis-à-vis du réseau stack exchange, toussa…
 
Parfait ;) Alors je comprends bien le principe de reprendre l'id lors de la création du formulaire, mais je comprends un petit peu moins sa mise en place.
Ah ok comme tu veux alors.
 
Déjà si tu pouvais poster ton urls.py que je comprenne un peu mieux d’où peut venir le problème
 
2:10 PM
urls.py de mon application 'Identity'
from django.conf.urls import url
from . import views

urlpatterns = [
url(r'^accueil$', views.Identity_Home),
url(r'^formulaire$', views.Identity_Form),
url(r'^formulaire_traite/(?P<id>\d+)/$', views.Identity_Resume),
url(r'^recherche$', views.Identity_Researching),
]
 
ok, alors déjà, prend l’habitude de nommer tes URLs
url(r'^formulaire_traite/(?P<id>\d+)/$', views.Identity_Resume, name='treated'),
par exemple
 
D'accord, c'est pour éviter d'avoir un long URL à retaper ?
 
entre autre
c’est surtout pour simplifier le boulot de django.shortcuts.reverse
comme ça, tu peux faire reverse('treated', id=certificate.id)
 
D'accord je vois. J'ajouterai le paramètre name = "" alors par la suite pour chaque URL
 
et ça va te reconstruire /formulaire_traite/123/ par exemple
 
2:15 PM
Hum d'accord. Néanmoins, l'URL me semblait juste n'est ce pas ?
 
l’url c’est bon, oui
même si, vu que pour les autres tu termines pas par /
je pense que tu peux l’enlever ici aussi
 
Pourtant, quand je remplis un formulaire et que je le valide directement (sans passer par une phase de preview qui ne marche plus, il faudra que je vois pourquoi), j'obtenais l'erreur suivante :

TypeError at /Identity/formulaire
__init__() got an unexpected keyword argument 'id'
D'accord
 
Tu l’as toujours cette erreur ?
 
Oui, mais il rajoute tout de même une instance dans la BDD
Il me pointe cette ligne dans le traceback : return redirect('formulaire_traite' ,id=post.id)
 
t’as changé le redirect pour utiliser le name que tu viens de mettre dans l'URL?
ah
ben voilà
change formulaire_traite
 
2:19 PM
par treated ?
 
en ce que tu as mis pour name=
oui
 
D'accord je vais essayer immédiatement
 
Y’a que en lui mettant les noms des URLs que redirect pourra accepter des arguments et reconstruire la bonne URL
 
Hum toujours la même erreur au même endroit : Exception Value:
__init__() got an unexpected keyword argument 'id'
/Users/valentinjungbluth/Desktop/Django/Etat_civil/Identity/views.py in Identity_Form
return redirect('treated' ,id=post.id) ...
▼ Local vars
Variable Value
form
<IdentityForm bound=True, valid=True, fields=(title;lastname;firstname;sex;birthday;birthcity;birthcountry;nationality;job;adress;city;zip;country;mail;phone)>
post
<Identity: 22 Mr BART Joel M 1956-02-03 MUNICH Allemagne ALLEMANDE VENDEUR 3, ApfelStrasse MUNICH 99332 Allemagne bart@hotmail.de 0237773222>
request
<WSGIRequest: POST '/Identity/formulaire'>
 
Étrange, je ne comprends pas très bien ce qui foire…
Ah, si
ça y est
il faut faire kwargs={'id': post.id}
ou args=[post.id]
au lieu de id=post.id
Quoique non
c’est redirect qui est utilisé ici, pas reverse…
je comprends pas trop
Essaye de remplacer le redirect par un HttpResponseRedirect(reverse('treated', kwargs={'id': post.id}))
pour voir.
 
2:41 PM
Désolé pour la petite absence
Apparemment cela à l'air de fonctionner, en faisant les import correspondants
Je teste la preview
 
normalement redirect('treated', id=post.id) est sensé faire cet appel, c’est étrange qu’il n’arrive pas à s’en sortir tout seul…
 
En effet, la preview ne fonctionne pas, je vais continuer à me pencher dessus.
Oui étonnant, alors que la méthode que tu m'as donné fonctionne bien apparemment (bon ajout dans la BDD, l'ID qui en ressort est également le bon, ...)
Je vais également regarder un peu plus en détail le reverse. Cela fait seulement 1 semaine que j'ai commencé à apprendre Django et c'est vrai qu'il me manque beaucoup de choses, même de base.
 
sinon un dernier truc dont j’ai oublié de parler dans ma réponse
don't do this
href=/Identity/formulaire
est suffisant
et ça te pèteras pas dans les doigts quand tu passeras en prod
mais de la même manière utilise {% url 'name' %} dans to template, qui va appeler reverse('name')
 
D'accord ! Effectivement enlever le localhost permettra de ne pas effectuer de modifications dans tous les fichiers. Bien pratique.

Je prends note et je modifie cela :)
En tout cas, merci beaucoup pour tout le temps que tu as passé à m'aider !
 
Mais du coup, tu as toujours la même erreur en utilisant reverse ou ça a changé ?
 
2:56 PM
Si j'utilise : return HttpResponseRedirect(reverse('treated', kwargs={'id': post.id}))

je n'ai plus d'erreurs :)
 
Pourtant tu dis que "En effet, la preview ne fonctionne pas,"
 
Ce qui ne fonctionne pas, c'est de passer en mode preview permettant de faire un (commit=False) pour ne pas sauvegarder directement dans la BDD et avoir la possibilité de modifier si une erreur s'est glissée
J'ai 2 options quand je remplis le formulaire : submit et preview comme suivant :
def Identity_Form(request) :

form = IdentityForm(request.POST or None)

if form.is_valid() :
if '_preview' in request.POST :
post = form.save(commit=False)
template_name = 'preview.html'

elif '_save' in request.POST :
post = form.save()
return HttpResponseRedirect(reverse('treated', kwargs={'id': post.id}))

return render(request, 'form_Identity.html', {"form" : form})
avec le template associé :
<!--DOCTYPE html -->
<html>
<body>

<h1 align="center"> Formulaire de fiche individuelle </h1>

<form method='POST' action=''> {% csrf_token %}

<h3> Partie contenant les informations de la fiche individuelle </h3>
{{ form.as_ul }}
{{birthday|date:"%d/%m/%Y" }}

<br></br>

<input type ="submit" name="_save" value="Valider la fiche individuelle" />
<input type ="submit" name="_preview" value="Prévisualiser la fiche individuelle" />
</form>
<form method='POST' action='/Identity/accueil'> {% csrf_token %}
 
Ah, tu veux dire que quand tu fais preview, tu as le truc qui s’affiche, mais quand tu cliques sur save ça plante ?
(Quand tu cliques sur save dans la preview)
 
Non quand je clique sur "preview" au moment de remplir le formulaire, la nouvelle page ne se charge pas. Rien ne se passe ^^
 
Les champs qui manquent sont optionnels ?
 
3:03 PM
oui ;)
 
si t’es avec le serveur de debug (manage.py runserver), tu peux mettre des print dans le code pour savoir où il passe
ceci dit: return render(request, 'form_Identity.html', {"form" : form})
tu veux peut-être dire template_name
au lieu de form_Identity.html
 
Fort possible, je suis entrain de tester cela en effet ;)
Je travaille avec le serveur de debug oui ;)
 
non mais c’est sûr, pour le coup, tu lui dit de toujours charger la page du formulaire, que tu ais cliqué sur preview ou que le formulaire soit pas complet.
réutilise ton template_name, ça ira mieux
par contre, tu risques d’avoir des soucis quand tu fais la preview et que tu veux sauver les données ensuite.
 
Avant que je fasse les modifications ca marchait effectivement. Faut que je revois tout de même cela parce que quelque chose coince.
Voilà, cela fonctionne bien avec enregistrement des données pendant la preview :
def Identity_Form(request) :

form = IdentityForm(request.POST or None)
template_name = 'form_Identity.html'

if form.is_valid() :
if '_preview' in request.POST :
post = form.save(commit=False)
template_name = 'preview.html'

elif '_save' in request.POST :
post = form.save()
return HttpResponseRedirect(reverse('treated', kwargs={'id': post.id}))

return render(request, template_name, {"form" : form})
 
Ok, ben si ça te va, tant mieux ;)
 
3:19 PM
Super en tout cas !
C'est agréable d'essayer de se débrouiller à coder avec des personnes comme toi haha

Tu es développeur à temps perdu ou c'est ton métier ?
 
C’est mon métier
Mais ça fait un petit bout de temps que j’ai pas vraiment touché à Django
 
D'accord ^^ Il est vrai que ce framework a vraiment l'air puissant à utiliser
 

last day (14 days later) »