Vous n'êtes pas identifié(e).
Bonjour !
Alors voila mon probleme avec le code en dessous. Mon probleme vient de la partie " elif 'save' in request.POST:"
Quoi qu'il arrive dans cette partie, mon formulaire se retrouve sauvegader dans ma base de données. Pourtant quand un utilisateur a déja un proposal sauvegader a son nom , un message pour le prévenir qu'il ne peut pas sauvegarder un nouveau proposal apparait et je renvoi l'utilisateur sur la page pour remplir un nouveau formulaire. D'ailleurs tout cela marche ! Cependant se formulaire invalide se retrouve quand meme enregistré dans la base de données... Pourquoi ?
def proposal_create(request):
"""
Add a new proposal in the table Proposals
Manage the webpage new_proposal
:var keywords: Permet de récupérer tout les mots-clefs existant pour pouvoir les afficher ensuite.
"""
keywords = Keywords.objects.all() # send the list of existing keywords
if request.method == 'POST':
if 'submit' in request.POST :
form = ProposalForm(request.POST, request.FILES)
if form.is_valid():
proposal = form.save(commit=False)
try:
name_bdd = User.objects.get(lastName = request.POST['pi_last_name']) #risque de bug avec bdd vide !
if name_bdd.firstName != request.POST['pi_first_name']: #risque de bug avec bdd vide
raise
except:
return render(request, 'new_user.html')
try:
form.check_co_pi_exist(request)
proposal.save()
messages.info(request, "Proposal enregistré !")
proposal.user_link.add(name_bdd)
form.add_co_pi_bdd(request, proposal)
except:
messages.warning(request, "Une erreur est survenue pendant l'enregistrement du Proposal")
else:
messages.error(request, "Le Formulaire que vous voulez soumettre n'est pas complet")
elif 'save' in request.POST:
form = ProposalFormSave(request.POST, request.FILES)
if form.is_valid():
try:
name_bdd = User.objects.get(lastName = request.POST['pi_last_name'])
if name_bdd.firstName == request.POST['pi_first_name']:
messages.warning(request, "Vous avez déja apparament un proposal sauvegardé a votre nom.")
return render(request, 'new_proposal.html', {'keywords': keywords})
except:
pass
proposal = form.save()
proposal.save()
messages.info(request, "Proposal sauvegardé !")
elif 'reset' in request.POST :
form = ProposalForm()
elif 'add_member' in request.POST:
return render(request, 'new_user.html')
else:
form = ProposalForm()
return render(request, 'new_proposal.html', {'keywords': keywords})
Hors ligne
En supposant que ProposalForm est un ModelForm, il manque le passage de l'instance lors de la création du formulaire.
Hors ligne
Hm, je crois que je vois. (Oui ce sont des ModelForm)
En fait au lieu de mon :
form = ProposalFormSave(request.POST, request.FILES)
Il me faut un truc du genre:
form = ProposalFormSave(request.POST, request.FILES, instance=MonModel)
C'est cela ?
Cependant je n'arrive pas bien a comprendre pourquoi ? Vu que la class de mon formulaire est déja construite a partir de mon model.
En tout cas merci pour ta réponse
Hors ligne
Bon et pour la petite histoire le probleme ne venait pas de la, mais d'un probleme avec ma bdd
Hors ligne
L'instance permet de savoir à quelle instance se rattacher. Cela n'a rien à voir avec la déclaration du model qui lui permet d'extraire les champs pour le formulaire.
Hors ligne