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:
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
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})
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 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')
Voila voila. Maintentant mon probleme!
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)
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 !
Partager