Bonjour !

Alors voila, j'ai commencé a travailler avec un certains schema pour ma base de données, mais maintenant j'aimerais modifier ma base de données afin de la rendre plus 'légère" disons.

Donc j'ai modifié mon model et mon formulaire, mais depuis je n'arrive plus du tout a sauvegarder mon formulaire dans ma base de données et je suis totalement perdu :/ !

Donc, si quelqu'un de meilleur/plus expérimenté que moi avait une idée de pourquoi mon travail ne marche pas, j'avoue que je serais plutôt intéréssé.

Voila mon code :

La view :

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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(username = request.POST['pi_login'])
                    if name_bdd.firstName != request.POST['pi_first_name'] or name_bdd.lastName != requ\
est.POST['pi_last_name']:
                        raise
                except:
                    return render(request, 'new_user.html')

                try:
                    form.check_call(request)
                    form.check_co_pi_exist(request, proposal)
                    proposal.CALL = settings.AO_CALL
                    messages.warning(request, "0.0")
                    proposal.save() #L'erreur vient de ce .save la !! / ! \
                    messages.warning(request, "0.1")
                    messages.info(request, "Proposal enregistré !")
                    proposal.user_link.add(name_bdd)
                    form.add_co_pi_bdd(request, proposal)
                    form.save_id_pi(proposal, request)
                except:
                    messages.warning(request, "Une erreur est survenue pendant l'enregistrement du Prop\
osal")
            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():

                MemoryProposal = form.save(commit=False)
                MemoryProposal.CALL = settings.AO_CALL
                MemoryProposal.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', {'form': form})
mon formulaire:

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
 
 
class ProposalForm(forms.ModelForm):
    """                                                                                                 
    Form for submit a new proposal                                                                      
    """
    class Meta:
        model           = Proposal
        propKeys        = forms.ModelMultipleChoiceField(queryset=Keywords.objects.all())
        pi_first_name   = forms.CharField(max_length = 100)
        pi_last_name    = forms.CharField(max_length = 100)
        pi_login        = forms.CharField(max_length = 100)
        co_pi           = forms.CharField(max_length = 100)
        justification   = forms.FileField(label='select a file', help_text='max. 1 Mb')
        fields          = ['proposalID', 'title', 'category', 'abstract', 'propKeys', 'justification']
 
        error_messages = {
            'title': {
                'required': ("This champ is required"),
            },
        }
mon model:

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
 
 
class Proposal(models.Model):
    """                                                                                                 
    define Proposal table for "submit" Proposal                                                         
    """
 
    user_link = models.ManyToManyField('webportal.User')
    CALL = models.CharField(max_length = 100)
 
    # primary key for proposal table                                                                    
    proposalID = models.AutoField(primary_key=True)
 
    # fields for proposal table : Proposal Information                                                  
    title    = models.CharField(max_length = 100)
    category = models.CharField(max_length = 50, choices = CATEGORY)
    abstract = models.TextField(null=True)
    propKeys = models.ManyToManyField('Keywords', related_name="proposalKeys",
                                      blank=True)
 
    # fields for proposal table : Team                                                                  
    #pi_first_name    = models.CharField(max_length = 100)                                              
    #pi_last_name     = models.CharField(max_length = 100)                                              
    #pi_login         = models.CharField(max_length = 100)                                              
    #co_pi            = models.CharField(max_length = 100, blank=True)                                  
    pi_id    = models.IntegerField(blank=True)
    co_pi_id = models.CharField(max_length = 100, blank=True)
 
    # fields for proposal table : Target List                                                           
    #target_name = models.CharField(max_length = 100)                                                   
    #obs_type    = models.CharField(max_length = 100)                                                   
 
    # fields for proposal table : Scientific Justification                                              
    justification = models.FileField( upload_to = 'test_import', max_length=100, null=True, blank=True)
 
    def __str__(self):
        return self.title
De plus, quand la méthode .save() ne marche pas. N'y a t'il pas moyen de récupérer un message d'erreur nous donnant des précisions sur pourquoi le save na pas marché ?

Merci d'avance pour vos réponses !