Bonjour,
je reviens encore aujourd'hui avec des questions sur django. Je suis en train
de faire une page de mise à jour des informations d'une personne qui
existe déjà dans ma base.
Models.py
class Personne:
nom=models.CharField(max_lengthE)
adr_emp=models.CharField(max_length%5)
tel_emp=models.CharField(max_length )
email=models.EmailField(unique=True)
voici comment j'ai procédé avec le controleur
def personne_modif(request, idp): #idp identifiant de la personne vennant
d'une autre page
formSet = modelformset_factory(Personne, max_num=1)
if request.method == 'POST':
formset = formSet(request.POST)
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
else:
fmset = formSet(queryset=Personne.objects.filter(id=int(idsr)))
return render_to_response('Personne_modif.html',{'form':fmset})
la mise à jour ne s'execute pas et j'ai les erreurs suivantes:
id existe déjà
matricule existe déjà
au lieu de faire la mise à jour, il veut créer une autre personne
dans la base. Comment je dois faire pour faire une mise à jour des
données avec django
Bonjour,
je reviens encore aujourd'hui avec des questions sur django. Je suis en train
de faire une page de mise à jour des informations d'une personne qui
existe déjà dans ma base.
Models.py
class Personne:
nom=models.CharField(max_length=45)
adr_emp=models.CharField(max_length=255)
tel_emp=models.CharField(max_length=20)
email=models.EmailField(unique=True)
voici comment j'ai procédé avec le controleur
def personne_modif(request, idp): #idp identifiant de la personne vennant
d'une autre page
formSet = modelformset_factory(Personne, max_num=1)
if request.method == 'POST':
formset = formSet(request.POST)
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
else:
fmset = formSet(queryset=Personne.objects.filter(id=int(idsr)))
return render_to_response('Personne_modif.html',{'form':fmset})
la mise à jour ne s'execute pas et j'ai les erreurs suivantes:
id existe déjà
matricule existe déjà
au lieu de faire la mise à jour, il veut créer une autre personne
dans la base. Comment je dois faire pour faire une mise à jour des
données avec django
Bonjour,
je reviens encore aujourd'hui avec des questions sur django. Je suis en train
de faire une page de mise à jour des informations d'une personne qui
existe déjà dans ma base.
Models.py
class Personne:
nom=models.CharField(max_lengthE)
adr_emp=models.CharField(max_length%5)
tel_emp=models.CharField(max_length )
email=models.EmailField(unique=True)
voici comment j'ai procédé avec le controleur
def personne_modif(request, idp): #idp identifiant de la personne vennant
d'une autre page
formSet = modelformset_factory(Personne, max_num=1)
if request.method == 'POST':
formset = formSet(request.POST)
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
else:
fmset = formSet(queryset=Personne.objects.filter(id=int(idsr)))
return render_to_response('Personne_modif.html',{'form':fmset})
la mise à jour ne s'execute pas et j'ai les erreurs suivantes:
id existe déjà
matricule existe déjà
au lieu de faire la mise à jour, il veut créer une autre personne
dans la base. Comment je dois faire pour faire une mise à jour des
données avec django
Bonjour,
je reviens encore aujourd'hui avec des questions sur django. Je suis en train
de faire une page de mise à jour des informations d'une personne qui existe déjà
dans ma base.
Models.py
class Personne:
nom=models.CharField(max_lengthE)
adr_emp=models.CharField(max_length%5)
tel_emp=models.CharField(max_length )
email=models.EmailField(unique=True)
voici comment j'ai procédé avec le controleur
def personne_modif(request, idp): #idp identifiant de la personne vennant
d'une autre page
formSet = modelformset_factory(Personne, max_num=1)
if request.method == 'POST':
formset = formSet(request.POST)
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
else:
fmset = formSet(queryset=Personne.objects.filter(id=int(idsr)))
return render_to_response('Personne_modif.html',{'form':fmset})
la mise à jour ne s'execute pas et j'ai les erreurs suivantes:
id existe déjà
matricule existe déjà
au lieu de faire la mise à jour, il veut créer une autre personne dans la base.
Comment je dois faire pour faire une mise à jour des données avec django
Bonjour,
je reviens encore aujourd'hui avec des questions sur django. Je suis en train
de faire une page de mise à jour des informations d'une personne qui existe déjà
dans ma base.
Models.py
class Personne:
nom=models.CharField(max_lengthE)
adr_emp=models.CharField(max_length%5)
tel_emp=models.CharField(max_length )
email=models.EmailField(unique=True)
voici comment j'ai procédé avec le controleur
def personne_modif(request, idp): #idp identifiant de la personne vennant
d'une autre page
formSet = modelformset_factory(Personne, max_num=1)
if request.method == 'POST':
formset = formSet(request.POST)
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
else:
fmset = formSet(queryset=Personne.objects.filter(id=int(idsr)))
return render_to_response('Personne_modif.html',{'form':fmset})
la mise à jour ne s'execute pas et j'ai les erreurs suivantes:
id existe déjà
matricule existe déjà
au lieu de faire la mise à jour, il veut créer une autre personne dans la base.
Comment je dois faire pour faire une mise à jour des données avec django
Bonjour,
je reviens encore aujourd'hui avec des questions sur django. Je suis en train
de faire une page de mise à jour des informations d'une personne qui existe déjà
dans ma base.
Models.py
class Personne:
nom=models.CharField(max_lengthE)
adr_emp=models.CharField(max_length%5)
tel_emp=models.CharField(max_length )
email=models.EmailField(unique=True)
voici comment j'ai procédé avec le controleur
def personne_modif(request, idp): #idp identifiant de la personne vennant
d'une autre page
formSet = modelformset_factory(Personne, max_num=1)
if request.method == 'POST':
formset = formSet(request.POST)
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
else:
fmset = formSet(queryset=Personne.objects.filter(id=int(idsr)))
return render_to_response('Personne_modif.html',{'form':fmset})
la mise à jour ne s'execute pas et j'ai les erreurs suivantes:
id existe déjà
matricule existe déjà
au lieu de faire la mise à jour, il veut créer une autre personne dans la base.
Comment je dois faire pour faire une mise à jour des données avec django
hervest a écrit :Bonjour,
je reviens encore aujourd'hui avec des questions sur django. Je suis en train
de faire une page de mise à jour des informations d'une personne qui
existe déjà
dans ma base.
Models.py
class Personne:
nom=models.CharField(max_lengthE)
adr_emp=models.CharField(max_length%5)
tel_emp=models.CharField(max_length )
email=models.EmailField(unique=True)
voici comment j'ai procédé avec le controleur
def personne_modif(request, idp): #idp identifiant de la personne vennant
d'une autre page
formSet = modelformset_factory(Personne, max_num=1)
Pourquoi un formset ???
Extrait de la doc:
"""
A formset is a layer of abstraction to working with multiple forms on
the same page.
"""
Ici, tu ne veux bosser que sur une instance à la fois. Donc, suivre les
instructions données ici:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/if request.method == 'POST':
formset = formSet(request.POST)
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
Utilise de préférence soit la merthode get_absolute_url de
l'instance
(si tu l'a définie dans ton modèle), soit
django.core.urlresolvers.reverse (avec bien sûr des urls nommées
dans
tes urls.py).else:
fmset = formSet(queryset=Personne.objects.filter(id=int(idsr)))
return render_to_response('Personne_modif.html',{'form':fmset})
la mise à jour ne s'execute pas et j'ai les erreurs suivantes:
id existe déjà
matricule existe déjà
>au lieu de faire la mise à jour, il veut créer une autre
personne dans la base.
Les éléments du formset n'étant liés à
aucune instance, c'est le
comportement attendu. Il faudrait que tu lie le formset à un queryset
lors de l'instanciation. Mais bon, puisque tu n'édite qu'une instance,
cf plus haut.Comment je dois faire pour faire une mise à jour des données
avec django
Comme indiqué dans la doc : en liant le ModelFormset à un
queryset, ou
le ModelForm à une instance du modèle correspondant.
HTH
hervest a écrit :
Bonjour,
je reviens encore aujourd'hui avec des questions sur django. Je suis en train
de faire une page de mise à jour des informations d'une personne qui
existe déjà
dans ma base.
Models.py
class Personne:
nom=models.CharField(max_lengthE)
adr_emp=models.CharField(max_length%5)
tel_emp=models.CharField(max_length )
email=models.EmailField(unique=True)
voici comment j'ai procédé avec le controleur
def personne_modif(request, idp): #idp identifiant de la personne vennant
d'une autre page
formSet = modelformset_factory(Personne, max_num=1)
Pourquoi un formset ???
Extrait de la doc:
"""
A formset is a layer of abstraction to working with multiple forms on
the same page.
"""
Ici, tu ne veux bosser que sur une instance à la fois. Donc, suivre les
instructions données ici:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/
if request.method == 'POST':
formset = formSet(request.POST)
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
Utilise de préférence soit la merthode get_absolute_url de
l'instance
(si tu l'a définie dans ton modèle), soit
django.core.urlresolvers.reverse (avec bien sûr des urls nommées
dans
tes urls.py).
else:
fmset = formSet(queryset=Personne.objects.filter(id=int(idsr)))
return render_to_response('Personne_modif.html',{'form':fmset})
la mise à jour ne s'execute pas et j'ai les erreurs suivantes:
id existe déjà
matricule existe déjà
>
au lieu de faire la mise à jour, il veut créer une autre
personne dans la base.
Les éléments du formset n'étant liés à
aucune instance, c'est le
comportement attendu. Il faudrait que tu lie le formset à un queryset
lors de l'instanciation. Mais bon, puisque tu n'édite qu'une instance,
cf plus haut.
Comment je dois faire pour faire une mise à jour des données
avec django
Comme indiqué dans la doc : en liant le ModelFormset à un
queryset, ou
le ModelForm à une instance du modèle correspondant.
HTH
hervest a écrit :Bonjour,
je reviens encore aujourd'hui avec des questions sur django. Je suis en train
de faire une page de mise à jour des informations d'une personne qui
existe déjà
dans ma base.
Models.py
class Personne:
nom=models.CharField(max_lengthE)
adr_emp=models.CharField(max_length%5)
tel_emp=models.CharField(max_length )
email=models.EmailField(unique=True)
voici comment j'ai procédé avec le controleur
def personne_modif(request, idp): #idp identifiant de la personne vennant
d'une autre page
formSet = modelformset_factory(Personne, max_num=1)
Pourquoi un formset ???
Extrait de la doc:
"""
A formset is a layer of abstraction to working with multiple forms on
the same page.
"""
Ici, tu ne veux bosser que sur une instance à la fois. Donc, suivre les
instructions données ici:
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/if request.method == 'POST':
formset = formSet(request.POST)
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
Utilise de préférence soit la merthode get_absolute_url de
l'instance
(si tu l'a définie dans ton modèle), soit
django.core.urlresolvers.reverse (avec bien sûr des urls nommées
dans
tes urls.py).else:
fmset = formSet(queryset=Personne.objects.filter(id=int(idsr)))
return render_to_response('Personne_modif.html',{'form':fmset})
la mise à jour ne s'execute pas et j'ai les erreurs suivantes:
id existe déjà
matricule existe déjà
>au lieu de faire la mise à jour, il veut créer une autre
personne dans la base.
Les éléments du formset n'étant liés à
aucune instance, c'est le
comportement attendu. Il faudrait que tu lie le formset à un queryset
lors de l'instanciation. Mais bon, puisque tu n'édite qu'une instance,
cf plus haut.Comment je dois faire pour faire une mise à jour des données
avec django
Comme indiqué dans la doc : en liant le ModelFormset à un
queryset, ou
le ModelForm à une instance du modèle correspondant.
HTH
bonjour,
merci, j'ai relu la page attentivement et j'ai trouvé ceci
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-a-custom-queryset
vous avez raison je n'avais pas lié modelformset a un queryset j'ai ajouté ceci
et ça marche
if request.method == 'POST':
formset = formSet(request.POST, queryset=Personne.objects.filter(id=int(idsr))
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
est ce que c'est ça que vous entendez par lier?
si j'utilise la methode get_absolute_url, certes je pourrais afficher mais si
l'on doit modifier les données pour une mise à jour,
est ce qu'après validation
du formulaire. je n'aurais pas le même problème c'est à dire qu'il va vouloir
faire une insertion et non une mise à jour? C'est à ça que j'ai pensé et je me
suis tourné vers les formset
bonjour,
merci, j'ai relu la page attentivement et j'ai trouvé ceci
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-a-custom-queryset
vous avez raison je n'avais pas lié modelformset a un queryset j'ai ajouté ceci
et ça marche
if request.method == 'POST':
formset = formSet(request.POST, queryset=Personne.objects.filter(id=int(idsr))
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
est ce que c'est ça que vous entendez par lier?
si j'utilise la methode get_absolute_url, certes je pourrais afficher mais si
l'on doit modifier les données pour une mise à jour,
est ce qu'après validation
du formulaire. je n'aurais pas le même problème c'est à dire qu'il va vouloir
faire une insertion et non une mise à jour? C'est à ça que j'ai pensé et je me
suis tourné vers les formset
bonjour,
merci, j'ai relu la page attentivement et j'ai trouvé ceci
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-a-custom-queryset
vous avez raison je n'avais pas lié modelformset a un queryset j'ai ajouté ceci
et ça marche
if request.method == 'POST':
formset = formSet(request.POST, queryset=Personne.objects.filter(id=int(idsr))
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
est ce que c'est ça que vous entendez par lier?
si j'utilise la methode get_absolute_url, certes je pourrais afficher mais si
l'on doit modifier les données pour une mise à jour,
est ce qu'après validation
du formulaire. je n'aurais pas le même problème c'est à dire qu'il va vouloir
faire une insertion et non une mise à jour? C'est à ça que j'ai pensé et je me
suis tourné vers les formset
hervest a écrit :
(snip)bonjour,
merci, j'ai relu la page attentivement et j'ai trouvé ceci
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-a-custom-queryset
vous avez raison je n'avais pas lié modelformset a un queryset j'ai
ajouté ceci
et ça marche
if request.method == 'POST':
formset = formSet(request.POST, queryset=Personne.objects.filter(id=int(idsr))
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
est ce que c'est ça que vous entendez par lier?
Oui.
Ceci étant, il n'en reste pas moins qu'utiliser un ModelForm*Set* pour
une seule instance est un WTF. Il faudrait ici utiliser un ModelForm.si j'utilise la methode get_absolute_url, certes je pourrais afficher mais si
l'on doit modifier les données pour une mise à jour,
???
Désolé, je ne vois pas le rapport entre le fait d'éviter
de coder des
urls en dur et la gestion des formulaires ?est ce qu'après validation
du formulaire. je n'aurais pas le même problème c'est à
dire qu'il va vouloir
faire une insertion et non une mise à jour? C'est à ça
que j'ai pensé et je me
suis tourné vers les formset
Pour les ModelForm comme pour les ModelFormSet, le fait d'insérer ou de
mettre à jour est conditionné par le fait de lier ou non le form
(resp.
formset) à une instance (resp. un queryset). Il y a donc deux
façons de
gérer cette distinction:
1/ avoir deux views differentes (une pour les creations, une pour les
modifs) - ce qui est _généralement_ une redondance inutile, en
tous cas
pour les cas simples
2/ avoir deux *urls* différentes ('/monmodel/add/' et
'/monmodel/<id>/edit/' par exemple) pointant sur la même view, l'id
étant par défaut à None, ce qui permet de distinguer
clairement les deux
cas. On a alors quelque chose comme:
from monapp.models import MonModel
from monapp.forms import MonModelForm
def monmodel_add_or_edit(request, id=None):
if id is not None:
# mise a jour
instance = get_object_or_404(MonModel, id)
else:
# creation
instance = None
if request.POST:
form = MonModelForm(request.POST, instance=instance)
if form.is_valid():
form.save()
return HttpResponseRedirect(instance.get_absolute_url())
else:
form = MonModelForm(instance=instance)
return render_to_response(
"monapp/montemplate.html",
dict(form=form),
context_instance=RequestContext(request)
)
hervest a écrit :
(snip)
bonjour,
merci, j'ai relu la page attentivement et j'ai trouvé ceci
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-a-custom-queryset
vous avez raison je n'avais pas lié modelformset a un queryset j'ai
ajouté ceci
et ça marche
if request.method == 'POST':
formset = formSet(request.POST, queryset=Personne.objects.filter(id=int(idsr))
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
est ce que c'est ça que vous entendez par lier?
Oui.
Ceci étant, il n'en reste pas moins qu'utiliser un ModelForm*Set* pour
une seule instance est un WTF. Il faudrait ici utiliser un ModelForm.
si j'utilise la methode get_absolute_url, certes je pourrais afficher mais si
l'on doit modifier les données pour une mise à jour,
???
Désolé, je ne vois pas le rapport entre le fait d'éviter
de coder des
urls en dur et la gestion des formulaires ?
est ce qu'après validation
du formulaire. je n'aurais pas le même problème c'est à
dire qu'il va vouloir
faire une insertion et non une mise à jour? C'est à ça
que j'ai pensé et je me
suis tourné vers les formset
Pour les ModelForm comme pour les ModelFormSet, le fait d'insérer ou de
mettre à jour est conditionné par le fait de lier ou non le form
(resp.
formset) à une instance (resp. un queryset). Il y a donc deux
façons de
gérer cette distinction:
1/ avoir deux views differentes (une pour les creations, une pour les
modifs) - ce qui est _généralement_ une redondance inutile, en
tous cas
pour les cas simples
2/ avoir deux *urls* différentes ('/monmodel/add/' et
'/monmodel/<id>/edit/' par exemple) pointant sur la même view, l'id
étant par défaut à None, ce qui permet de distinguer
clairement les deux
cas. On a alors quelque chose comme:
from monapp.models import MonModel
from monapp.forms import MonModelForm
def monmodel_add_or_edit(request, id=None):
if id is not None:
# mise a jour
instance = get_object_or_404(MonModel, id)
else:
# creation
instance = None
if request.POST:
form = MonModelForm(request.POST, instance=instance)
if form.is_valid():
form.save()
return HttpResponseRedirect(instance.get_absolute_url())
else:
form = MonModelForm(instance=instance)
return render_to_response(
"monapp/montemplate.html",
dict(form=form),
context_instance=RequestContext(request)
)
hervest a écrit :
(snip)bonjour,
merci, j'ai relu la page attentivement et j'ai trouvé ceci
http://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-a-custom-queryset
vous avez raison je n'avais pas lié modelformset a un queryset j'ai
ajouté ceci
et ça marche
if request.method == 'POST':
formset = formSet(request.POST, queryset=Personne.objects.filter(id=int(idsr))
if formset.is_valid():
formset.save()
return HttpResponseRedirect('/fiche/')
est ce que c'est ça que vous entendez par lier?
Oui.
Ceci étant, il n'en reste pas moins qu'utiliser un ModelForm*Set* pour
une seule instance est un WTF. Il faudrait ici utiliser un ModelForm.si j'utilise la methode get_absolute_url, certes je pourrais afficher mais si
l'on doit modifier les données pour une mise à jour,
???
Désolé, je ne vois pas le rapport entre le fait d'éviter
de coder des
urls en dur et la gestion des formulaires ?est ce qu'après validation
du formulaire. je n'aurais pas le même problème c'est à
dire qu'il va vouloir
faire une insertion et non une mise à jour? C'est à ça
que j'ai pensé et je me
suis tourné vers les formset
Pour les ModelForm comme pour les ModelFormSet, le fait d'insérer ou de
mettre à jour est conditionné par le fait de lier ou non le form
(resp.
formset) à une instance (resp. un queryset). Il y a donc deux
façons de
gérer cette distinction:
1/ avoir deux views differentes (une pour les creations, une pour les
modifs) - ce qui est _généralement_ une redondance inutile, en
tous cas
pour les cas simples
2/ avoir deux *urls* différentes ('/monmodel/add/' et
'/monmodel/<id>/edit/' par exemple) pointant sur la même view, l'id
étant par défaut à None, ce qui permet de distinguer
clairement les deux
cas. On a alors quelque chose comme:
from monapp.models import MonModel
from monapp.forms import MonModelForm
def monmodel_add_or_edit(request, id=None):
if id is not None:
# mise a jour
instance = get_object_or_404(MonModel, id)
else:
# creation
instance = None
if request.POST:
form = MonModelForm(request.POST, instance=instance)
if form.is_valid():
form.save()
return HttpResponseRedirect(instance.get_absolute_url())
else:
form = MonModelForm(instance=instance)
return render_to_response(
"monapp/montemplate.html",
dict(form=form),
context_instance=RequestContext(request)
)