Bonjour à tous, je me suis mis à Django depuis 2 mois et je dois dire que j'en bave. Je ne trouve pas cela du tout intuitif même si je reconnais que pour certaines choses c'est -à peine- plus rapide que de tout coder en php/html
Aussi je vous explique où je galère:
- Lorsque j'entre une variable via un formulaire, elle n'apparait pas de suite dans la liste déroulante de la page suivante ? Il y a un retard !!
- J'utilise un formulaire et sur la page suivante, ce meme formulaire est en lecture seul pour confirmation, mais il ne m'autorise pas certains champ -Taille.taille et Operation.name car ils sont en 'unique=True' mais sur une autre table. (c'est comme-ci le formulaire voulait écrire dans la même table ?
- Je dois télécharger un fichier via une BDD, comment faire le lien ? Faut il passer par le fichier urls.py ?
Voici le code models.py
voici le code pour forms.py
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 class Taille(models.Model): taille = models.IntegerField(max_length=10, blank=False) def __unicode__(self): return str(self.taille) class Operation(models.Model): name = models.CharField(max_length=254, unique=True) create_date = models.DateTimeField('date de creation', auto_now_add=True) def __unicode__(self): return self.name def was_published_recently(self): return self.create_date >= timezone.now() - datetime.timedelta(days=1) was_published_recently.admin_order_field = 'create_date' was_published_recently.boolean = True was_published_recently.short_description ='Published recently' date_hierarchy = 'create_date' class DescLivre(models.Model): taille = models.ForeignKey(Taille) editeur = models.TextField() collection = models.TextField() used = models.BooleanField(default=False) def __unicode__(self): return self.editeur class livre(models.Model): ad_mail = models.EmailField() password = models.CharField(max_length=512, blank=True) resumer = models.TextField(blank=True) autre = models.TextField(blank=True) editeur = models.ForeignKey(DescLivre, related_name="editeur") colletion = models.ForeignKey(DescLivre, related_name="collection") operation = models.ForeignKey(Operation) user = models.ForeignKey(User)
Voici le fichier views.py
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 class OperationForm(forms.ModelForm): class Meta: model = Operation fields = ['name'] class LivreForm(forms.ModelForm): class Meta: model = Livre fields = ['mmp', 'ad_mail', ] class ListeOperationForm(forms.Form): name = forms.CharField(widget=forms.Select(choices=Operation.objects.all().values_list('name','name'))) class TailleForm(forms.Form): taille = forms.CharField(widget=forms.Select(choices=Taille.objects.all().values_list('id','taille'))) ####################################################################### # Recuperation des infos et affichage en lecture seule # class ValiderLivreForm(forms.ModelForm): class Meta: model = Livre fields = ['mmp', 'ad_mail'] # Permet la lecture seule des champs du formulaire def set_readonly(self): for key, field in self.fields.items(): field.widget.attrs['readonly'] = True class ValiderTailleForm(forms.ModelForm): class Meta: model = Taille fields = ['id'] # Permet la lecture seule des champs du formulaire def set_readonly(self): for key, field in self.fields.items(): field.widget.attrs['readonly'] = True # Affichage en lecture seule du choix du menu déroulant # taille = forms.IntegerField(label="Taille") class ValiderlisteOperationForm(forms.ModelForm): class Meta: model = Operation fields = ['name'] # Permet la lecture seule des champs du formulaire def set_readonly(self): for key, field in self.fields.items(): field.widget.attrs['readonly'] = True # Affichage en lecture seule du choix du menu déroulant # name = forms.CharField(label="Operation")
Merci à vous
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 def logout(request): return render(request, 'generation/logout.html', locals()) from generation.forms import LivreForm, TailleForm, ListeOperationForm, ValiderTailleForm, ValiderLivreForm, ValiderlisteOperationForm def bouquin(request): if request.method == 'POST': livre_form = LivreForm(request.POST) taille_form = TailleForm(request.POST) listeoperation_form = ListeOperationForm(request.POST) Reponsetaille = request.POST.get('taille') #Si le formulaire est valide et que l'on appui sur -valider-, il est sauvegarder dans la bdd (et le fichier est cree) # if livre_form.is_valid() and 'valider' in request.POST: free_desclivre = Desclivre.objects.filter(used='0').filter(taille_id=Reponsetaille) if len(free_desclivre) < 2: return HttpResponse('Il n\'a plus rien.') desclivre_editeur = free_desclivre[0] desclivre_collection = free_desclivre[1] c_livre = Livre( ad_mail = livre_form.cleaned_data['ad_mail'], mmp = livre_form.cleaned_data['mmp'], resumer = desclivre_editeur, autre = desclivre_collection, operation = Operation.objects.get(name=request.POST.get("name")), user = request.user ) c_id = add_create_code_barre( ad_mail = livre_form.cleaned_data['ad_mail'], mmp = livre_form.cleaned_data['mmp'], resumer = desclivre_editeur, autre = desclivre_collection, ) c_livre.save() desclivre_editeur = True desclivre_editeur.save() desclivre_collection = True desclivre_collection.save() #PERMET LA CREATION DE DOSSIER EN FONCTION DU NOM# dirname=request.POST.get("name") if not os.path.exists(os.path.join('/home/ab/projet/templates/archives/', dirname)): os.mkdir(os.path.join('/home/ab/projet/templates/archives/', dirname)) #en test Texte='OK' newfile='ab.txt' d=nouv_fichier(dirname, newfile, Texte) livre_form.save() return redirect('recuperation') elif livre_form.is_valid() and taillecle_form.is_valid() and listeoperation_form.is_valid() and 'editer' in request.POST: livre_form = ValiderLivreForm(request.POST) taille_form = ValiderTailleForm(request.POST) listeoperation_form = ValiderlisteOperationForm(request.POST) livre_form.set_readonly() taille_form.set_readonly() listeoperation_form.set_readonly() return render(request, 'generation/validation_conf.html', {'livre_form' : livre_form, 'taillecle_form': taille_form, 'listeoperation_form':listeoperation_form }) else: livre_form = LivreForm() taille_form = TailleForm() listeoperation_form = ListeOperationForm() return render(request, 'generation/ajout_Creer.html', {'livre_form' : livre_form, 'taille_form': taillecle_form, 'listeoperation_form':listeoperation_form}) from bouquin.models import DescLivre def recuperation(request): c = Livre.objects.all return render(request, 'generation/recuperation.html', {'recuperation': c}) ################################################################################################################################# ################################-FONCTION PERMETTANT DE CREER UN FICHIER AVEC MARQUE DEDANS - HELLO-############################# def add_create_code_barre(ad_mail, mmp, editeur, collection): """ Formule de math """ return c #PERMET D'AJOUTER UNE OPERATION' def operation(request): if request.method == 'POST': operation_form = OperationForm(request.POST) if operation_form.is_valid(): name = operation_form.cleaned_data['name'] operation_form.save() return HttpResponseRedirect('bouquin') else: operation_form = OperationForm() return render(request, 'generation/operation.html', {'operation_form' : operation_form}) ##################################################################### #PAGE d'ACCUEIL. def accueil(request): return render(request, 'generation/accueil.html', locals()) #En test pour inserer fichier dans dossier sans connaitre le nom su dossier avant# def nouv_fichier(dirname, newfile, Texte): chemin=('/home/ab/projet/templates/archives/',dirname) chemin_bis=('chemin/',newfile) print chemin_bis with open(chemin_bis,'w', encoding='utf-8') as f: myfile = File(f) myfile.write(Texte) return
Partager