I'm encountering issues while trying to implement a route to update data in my database using Flask. I have a template and a form model, and although I receive a 200 HTTP response, the data doesn't seem to update. Furthermore, specific error messages are not present in the logs.
Upon debugging, I noticed that I cannot print anything inside the "if form.validate_on_submit():" condition. However, I can't print any error messages to identify where the validation fails. Additionally, my form has no validator.
Here is my form model :
class UpdateMaisons(FlaskForm):
id = StringField("id", validators=[DataRequired()])
denomination = StringField("denomination", validators=[])
code_postal = StringField("code_postal", validators=[])
adresse = StringField("adresse", validators=[])
commune = StringField("commune", validators=[])
dpmt = StringField("dpmt", validators=[])
region = SelectField("region", choices=[], validators=[])
code_INSEE = StringField("code_INSEE", validators=[])
pays = StringField("pays", validators=[])
date_label = StringField("date_label", validators=[])
latitude = StringField("latitude", validators=[])
longitude = StringField("longitude", validators=[])
museeFrance = BooleanField("musee_france", validators=[])
monumentsInscrits = BooleanField("monuments_inscrits", validators=[])
monumentsClasses = BooleanField("monuments_classes", validators=[])
nombreSPR = IntegerField("nombre_SPR", validators=[])
type = SelectField("type", choices=[], validators = [])
idWikidata = SelectField("id_wikidata", choices = [], validators=[])
Here is my template :
<form action="{{url_for('update_maisons', nom_maison=donnees.denomination)}}" method="post" name="update_maisons">
{{ form.hidden_tag() }}
{%if donnees%}
<div>
<h1>Dénomination du bâtiment :
{{donnees.denomination}}</h1>
</div>
<div class="form-group">
<label for="id">Identifiant Mérimée : </label>
{{ form.id(class_="form-control") }}
</div>
<div class="form-group">
<label for="adresse">Adresse : </label>
{{ form.adresse(class_="form-control") }}
</div>
<div class="form-group">
<label for="code_postal">Enter le code Postal : </label>
{{ form.code_postal(class_="form-control") }}
</div>
<div class="form-group">
<label for="commune">Dans quelle commune : </label>
{{ form.commune(class_="form-control") }}
</div>
<div class="form-group">
<label for="code_INSEE">Enter le code INSEE de la commune : </label>
{{ form.code_INSEE(class_="form-control") }}
</div>
<div class="form-group">
<label for="dpmt">Dans quel département : </label>
{{ form.dpmt(class_="form-control") }}
</div>
<div class="form-group">
<label for="region">Région d'appartenance : </label>
{{ form.region(class_="form-control") }}
</div>
<div class="form-group">
<label for="latitude">Latitude : </label>
{{ form.latitude(class_="form-control") }}
</div>
<div class="form-group">
<label for="longitude">Longitude : </label>
{{ form.longitude(class_="form-control") }}
</div>
<div class="form-group">
<label for="date_label">Date de labellisation : </label>
{{ form.date_label(class_="form-control") }}
</div>
<div class="form-group">
<label for="type">Domaine de génie : </label>
<small id="type" class="form-text text-muted">Sélectionner le domaine : </small>
{{ form.type(class_="form-control") }}
</div>
<div class="form-group">
<p>Cocher les labels additionnels : </p>
<label for="musee_france">Le bâtiment est aussi Musée de France </label>
{{ form.museeFrance() }}
</div>
<div class="form-group">
<label for="monuments_inscrit">Le bâtiment est aussi Monument National Inscrit </label>
{{ form.monumentsInscrits() }}
</div>
<div class="form-group">
<label for="monuments_classes">Le bâtiment est aussi Monument National Classé </label>
{{ form.monumentsClasses() }}
</div>
<div class="form-group">
<label for="nombre_SPR">Nombre de Sites Patrimoniaux Remarquables dans la commune : </label>
{{ form.nombreSPR(class_="form-control") }}
</div>
<div class="form-group">
<label for="id_wikidata">Sélectionner l'identifiant de la personne associée : </label>
{{ form.idWikidata(class_="form-control") }}
</div>
{%endif%}
<p><input type="submit" value="Mettre à jour"></p>
</form>
And here the route :
@app.route("/update/maisons/<string:nom_maison>", methods=['GET', 'POST'])
def update_maisons(nom_maison):
distinct_regions = Maisons.get_distinct_regions()
donnees= Maisons.query.filter(Maisons.denomination == nom_maison).first()
form = UpdateMaisons(obj=donnees)
form.idWikidata.choices = [('','')] + [(personnes.idWikidata, personnes.idWikidata) for personnes in Personnes.query.all()]
form.region.choices = [('','')] + [(region, region) for region in distinct_regions]
form.type.choices = [('','')] + [(domaine.value, domaine.value) for domaine in Domaine]
print("Formulaire est-il valide ?", form.validate_on_submit())
if not form.validate_on_submit():
app.logger.error("Erreurs de validation du formulaire : %s", form.errors)
try:
if form.validate_on_submit():
id = clean_arg(request.form.get("id", None))
adresse = clean_arg(request.form.get("adresse", None))
commune = clean_arg(request.form.get("commune", None))
code_postal = clean_arg(request.form.get("code_postal", None))
code_INSEE = clean_arg(request.form.get("code_INSEE", None))
dpmt = clean_arg(request.form.get("dpmt", None))
region = clean_arg(request.form.get("region", None))
pays = clean_arg(request.form.get("pays", None))
latitude = clean_arg(request.form.get("latitude", None))
longitude = clean_arg(request.form.get("longitude", None))
date_label = clean_arg(request.form.get("date_label", None))
type = clean_arg(request.form.get("type", None))
museeFrance = clean_arg(request.form.get("musee_france", None))
monumentsInscrits = clean_arg(request.form.get("monuments_inscrits", None))
monumentsClasses = clean_arg(request.form.get("monuments_classes", None))
nombreSPR = clean_arg(request.form.get("nombre_SPR", None))
idWikidata = clean_arg(request.form.get("id_wikidata", None))
# Récupérer l'objet Maison à mettre à jour
maison_a_mettre_a_jour = Maisons.query.filter(Maisons.denomination == nom_maison).first()
# Vérifier si l'objet existe
if maison_a_mettre_a_jour:
# Mettre à jour les propriétés de l'objet avec les nouvelles valeurs
maison_a_mettre_a_jour.id = id
maison_a_mettre_a_jour.adresse = adresse
maison_a_mettre_a_jour.commune = commune
maison_a_mettre_a_jour.code_postal = code_postal
maison_a_mettre_a_jour.code_INSEE = code_INSEE
maison_a_mettre_a_jour.dpmt = dpmt
maison_a_mettre_a_jour.region = region
maison_a_mettre_a_jour.pays = pays
maison_a_mettre_a_jour.latitude = latitude
maison_a_mettre_a_jour.longitude = longitude
maison_a_mettre_a_jour.date_label = date_label
maison_a_mettre_a_jour.type = Domaine[type]
maison_a_mettre_a_jour.museeFrance = museeFrance
maison_a_mettre_a_jour.monumentsInscrits = monumentsInscrits
maison_a_mettre_a_jour.monumentsClasses = monumentsClasses
maison_a_mettre_a_jour.nombreSPR = nombreSPR
maison_a_mettre_a_jour.idWikidata = idWikidata
# Effectuez l'opération de mise à jour
db.session.commit()
print("insertion faite")
# Rediriger vers une page de confirmation ou une autre page appropriée
#return redirect(url_for('info_maisons', nom_maisons=nom_maison))
else:
print("Aucun information sur cette maison.")
except Exception as e:
print(f"Une erreur s'est produite : {str(e)}")
db.session.rollback()
return render_template("pages/update_maisons.html",
sous_titre= "Update maisons",
form=form,
donnees=donnees)
Here is the response when I run the code :
Formulaire est-il valide ? False [2024-02-16 19:52:35,538] ERROR in update: Erreurs de validation du formulaire : {} 127.0.0.1 - - [16/Feb/2024 19:52:35] "GET /update/maisons/MAISON%20DE%20%0A%20JULIE%20VICTOIRE%20DAUBIÉ HTTP/1.1" 200 - Formulaire est-il valide ? False [2024-02-16 19:52:35,606] ERROR in update: Erreurs de validation du formulaire : {} 127.0.0.1 - - [16/Feb/2024 19:52:35] "GET /update/maisons/MAISON%20DE%20%0A%20JULIE%20VICTOIRE%20DAUBIÉ HTTP/1.1" 200 - Formulaire est-il valide ? False [2024-02-16 19:52:35,757] ERROR in update: Erreurs de validation du formulaire : {} 127.0.0.1 - - [16/Feb/2024 19:52:35] "GET /update/maisons/MAISON%20DE%20%0A%20JULIE%20VICTOIRE%20DAUBIÉ HTTP/1.1" 200 -
I would appreciate any help in understanding these logs or gaining access to more information about the validation error. Thank you!