Un Updateview qui n'enregistre pas les modifications

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour à tous. J’ai réalisé une vue pour modifier les données d’une table. La vue affiche correctement l’enregistrement choisi. Mais lorque j’effectue des modifications, celles ci ne sont pas enregistrées quand je clique sur le bouton pour saver. Le formulaire se réaffiche avec les mêmes informations initiales, tout comme si je n’avais rien changé. Tous les formulaires de modification que je crée, présentent ce dysfonctionnement. Tout porte à croire que le formulaire n’est pas validé, et je ne sais vraiment pas pourquoi il ne l’est pas. ça fait plusieurs jours que je me lime les dents sur cette situation et ça me donne l’insomnie. Merci de m’aider. Voici les codes:

Le modèle de données:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Oev(models.Model):
    Diocese = models.ForeignKey(Diocese,on_delete=models.CASCADE)
    CuOev = models.CharField(max_length=80, primary_key=True,default=GenererCodeUnique('oev'))
    Code_oev =models.CharField(max_length=100,blank=True, null=True,default='')
    Nom = models.CharField(max_length=80,blank=True, null=True,default='')
    Prenom = models.CharField(max_length=150,blank=True, null=True,default='')
    date_Nais = models.DateField(blank=True, null=True)
    Lieu_Nais = models.CharField(max_length=150,blank=True, null=True,default='')
    chSexe = (
        ('M', 'Masculin'),
        ('F', 'Féminin'),
    )
    Sexe= models.CharField(max_length=1, choices=chSexe, blank=True,null=True)

J’ai créé un formulaire simple pour ce modèle de données:

1
2
3
4
class OevForm(forms.ModelForm):
    class Meta:
        model=Oev
        fields = '__all__'

et voici la vue en question. Je récupère la clé de l’enregistrement choisi à partir d’une liste, dans la variable "cu"

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def OevUpdate(request,cu,template_name = 'AppDatas/oev_form.html'):
    unoev = get_object_or_404(Oev, pk=cu)
    form = OevForm(instance=unoev)
    if form.is_valid():
        un=form.save(commit=False)
        un.Diocese_Id=form.Diocese.CuDiocese
        un.CuOev=form.CuOev
        un.save()
        return redirect('listedesOev')
    return render(request, template_name, {'form': form})

j’appelle cette vue dans le fichier urls avec la ligne suivante:

1
 url(r'^oev/upd/(?P<cu>[a-zA-Z0-9_]+)$', views.OevUpdate, name='oev-detail'),

Tout me parait bien claire, mais chaque fois que j’apporte des modifications et que je valide, le formulaire est réinitialisé sur les valeurs originales de l’élément affiché sans sauver ces modifications. J’ai beau cherché, je ne vois pas où se trouve le bug.

Merci de votre aide.

+0 -0
Auteur du sujet

Bonjour victor. J’ai suivi ton conseil. J’ai même étudié la page en français. En plus j’ai intégré les codes exemples pour afficher les erreurs. Il ne m’affiche aucun message d’erreur et le problème persiste. Je comprends bien que c’est un problème lié à la validation du formulaire, mais je n’ai aucune autre indication pour sortir de cette situation.

+0 -0

Salut,

Tu devrais regarder du côté des formview qui rendront ta vue plus simple. Pour ton problème il peut s’agir d’une erreur dans le template du formulaire. Comment affiche tu le form ? As tu bien placé le token crsf ?

Comme le dit victor, la réponse se trouve normalement dans les erreurs. As tu bien regardé dans form.non_field_errors et dans l’attribut error de chacun des champs ?

+1 -0
Auteur du sujet

Salut à tous. Avec les apports de Victor et de Anto59290, j’ai pu résoudre le problème. Le formulaire ne pouvait pas être validé car il y avait une erreur sur un des champs. Merci pour votre aide.

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte