Django-fr

Forum

#1 07-09-2015 16:31:58

Napoleon
Membre
Inscription : 27-08-2015
Messages : 16

Enregistrement illogique dans la bdd

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 smile ! Cependant se formulaire invalide se retrouve quand meme enregistré dans la base de données... Pourquoi ? hmm

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

#2 08-09-2015 09:51:01

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Enregistrement illogique dans la bdd

En supposant que ProposalForm est un ModelForm, il manque le passage de l'instance lors de la création du formulaire.

Hors ligne

#3 08-09-2015 12:05:53

Napoleon
Membre
Inscription : 27-08-2015
Messages : 16

Re : Enregistrement illogique dans la bdd

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 wink

Hors ligne

#4 08-09-2015 16:38:54

Napoleon
Membre
Inscription : 27-08-2015
Messages : 16

Re : Enregistrement illogique dans la bdd

Bon et pour la petite histoire le probleme ne venait pas de la, mais d'un probleme avec ma bdd wink

Hors ligne

#5 11-09-2015 12:11:14

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Enregistrement illogique dans la bdd

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

Pied de page des forums