Bonjour !

Bon me voila bien embeter.

Dans le cadre de mon projet Django, il y 'a un formulaire ou je propose deux options: 1) 'Submit' -> Permet de soumettre definitivement le formulaire et le faire rentrer dans ma bdd

2) 'Save' -> Permet de sauvegarder une partie du formulaire déja rempli sans le soumettre ( Afin de pouvoir continuer a le remplir ultérieurement).

Voici le code de ma 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
 
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 v\
ide !                                                                                                              
                    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:
                    form.check_no_save(request)
                except:
                    messages.error(request, "Une erreur est survenue. Vous aller etre redirigé vers la page new_pr\
oposal")
        	return render(request, 'new_proposal.html', {'keywords': keywords})
                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})
celui de mon formulaire de Save:

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
 
class ProposalFormSave(forms.ModelForm):
    """                                                                                      
    Form for save a new proposal                                                             
    """
    class Meta:
        model = MemoryProposal                                  
        justification = forms.FileField(label='select a file', help_text='max. 1 Mb')
        fields = ['proposalID', 'title', 'category', 'abstract', 'propKeys', 'pi_first_name'\
, 'pi_last_name', 'co_pi', 'justification']
 
    def check_no_save(self, request):
        """                                                                                  
        If user try to "save" a proposal but have more than one proposal save. Return a warn\
ning message and redirect to new_proposal page                                               
        """
 
        name_bdd = MemoryProposal.objects.get(pi_last_name = request.POST['pi_last_name'])
        if name_bdd.pi_first_name == request.POST['pi_first_name']:
           messages.warning(request, "Vous avez déja apparament un proposal sauvegardé a vo\
tre nom.")
            return render(request, 'new_proposal.html')
Et son modele:

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
 
class MemoryProposal(models.Model):
    """                                                                                      
    define Proposal table for "save" Proposal                                                
    """
    #user_link = models.ManyToManyField('webportal.User')#Doit-on lier les Memory a un user?
 
    # primary key for proposal table                                                         
    proposalID = models.AutoField(primary_key=True)
 
    # fields for proposal table : Proposal Information                                       
    title    = models.CharField(max_length = 100, blank=True)
    category = models.CharField(max_length = 50, choices = CATEGORY, blank=True)
    abstract = models.TextField(null=True, blank=True)
    propKeys = models.ManyToManyField('Keywords', related_name="memoryproposalKeys",
                                      blank=True)
 
    # fields for proposal table : Team                                                       
    pi_first_name    = models.CharField(max_length = 100, blank=True)
    pi_last_name     = models.CharField(max_length = 100, blank=True)
    co_pi            = 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)
Voila voila. Maintentant mon probleme!

Il s'avere que quand j'appuie sur le bouton save de ma page, si tout les champs ne sont pas remplis. un gentil message " Please fill out this field" apparait pour me dire de remplir me champs laissés vides !

J'aimerai bien pouvoir me débarasser de ce blocage et pouvoir enregistré mon formulaire que mes champs soit vides ou non.

De plus je ne comprends pas. Dans mon model, j'ai pourtant bien précisé "blank=True" . Mon formulaire hérite bien de mon model ? Dois-je préciser dans mon formulaire aussi required=False ? Mais comment faire , les champs de mon formulaire ne sont-il pas liés au champ fields=['...','...'..] ?

Bref, je suis un paumé ^^. Pourquoi ne puis-je pas laisser les champs de mon formulaire vide ?

Si jamais vous avez une réponse, vous voila les bienvenus !