Development #32954
afficher les champs civilité verrouillés
0%
Description
Cas similaire à #25246, on utilise un RadioSelect or ça ne marche pas avec l'attribut readonly, on peut quand même changer la sélection. On ne pourra pas utiliser la même solution que w.c.s. car on a suffisamment pas la main sur le rendu des widgets et je n'ai pas envie de chercher une bidouille à base de template spécifique; le plus simple sera d'en faire un champ Select classique verrouilé.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Bloque Development #32876: Faire que la configuration par défaut verrouille la civilité ajouté
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0002-forms-replaces-RadioSelect-by-Select-of-locked-attri.patch ajouté
- Fichier 0001-reorganize-views-and-forms-32934.patch 0001-reorganize-views-and-forms-32934.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Construit au dessus de #32934.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier
0002-forms-replaces-RadioSelect-by-Select-of-locked-attri.patchsupprimé
Mis à jour par Nicolas Roche il y a presque 5 ans
- Statut changé de Solution proposée à Information nécessaire
ouch, est-ce que tu pourrais rebaser stp ?
(pas trop envie valider le grand nettoyage de printemps une seconde fois)
Mis à jour par Frédéric Péters il y a presque 5 ans
- Fichier 0001-forms-replaces-RadioSelect-by-Select-of-locked-attri.patch 0001-forms-replaces-RadioSelect-by-Select-of-locked-attri.patch ajouté
- Statut changé de Information nécessaire à Solution proposée
Il me semble que le patch attaché est en fait totalement intégré dans l'autre (#32934) et le patch qui pouvait concerner directement ce ticket, 0002-forms-replaces-RadioSelect-by-Select-of-locked-attri, supprimée; peut-être que l'objectif était l'inverse, supprimer 0001 et garder 0002 ici.
Le 0002, il se cherrypicke sans problème (cfbdd97c91771e402565796bb5b89a1f6d153ba4), le revoilà.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Frédéric Péters a écrit :
Il me semble que le patch attaché est en fait totalement intégré dans l'autre (#32934) et le patch qui pouvait concerner directement ce ticket, 0002-forms-replaces-RadioSelect-by-Select-of-locked-attri, supprimée; peut-être que l'objectif était l'inverse, supprimer 0001 et garder 0002 ici.
Le 0002, il se cherrypicke sans problème (cfbdd97c91771e402565796bb5b89a1f6d153ba4), le revoilà.
Ouaip mauvais git submit
le premier patch c'était celui de #32934, c'est tout comme Fred il dit.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0001-forms-replaces-RadioSelect-by-Select-of-locked-attri.patch 0001-forms-replaces-RadioSelect-by-Select-of-locked-attri.patch ajouté
Rebasé.
Mis à jour par Nicolas Roche il y a presque 5 ans
merci :)
Je vois bien que les boutons radio sont transformés en liste quand le champ est passé à "vérifié" et que l'on recharge la page d'édition du profil, cependant j'ai l'impression que dans un cas comme dans l'autre on peut encore modifier la sélection.
(je lance le test avec un point d'arrêt puis je colle le contenu de la réponse dans une page html statique)
Sergei me dis que 'readonly="readonly"
' n'a jamais fonctionné que sur les champs texte.
J'ai l'impression que dans les 2 cas on peut verrouiller la sélection en utilisant la "nouvelle" syntaxe :
<<< readonly="readonly" --- disabled="disabled" >>>
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0001-forms-implement-locked-fields-by-renaming-and-widget.patch 0001-forms-implement-locked-fields-by-renaming-and-widget.patch ajouté
- les champs verrouilés sont ré-implémentés comme des CharField avec un widget TextInput read-only
- leur valeur initiale est calculée, celle de l'attribut convertie via field.choices ou field.format_value()
- leur nom est modifié en ajoutant le suffixe '@disabled' évitant ainsi qu'ils soient traité par la mécanique de ModelForm et de UserForm, et le dictionnaire ordonné self.fields est reconstruit en remplaçant les anciens noms par les nouveaux.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0001-forms-implement-locked-fields-by-renaming-and-widget.patch 0001-forms-implement-locked-fields-by-renaming-and-widget.patch ajouté
Fonctionnalité de verrouillage séparée dans un mixin.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier Firefox_Screenshot_2019-06-17T22-33-21.750Z.png Firefox_Screenshot_2019-06-17T22-33-21.750Z.png ajouté
Champ texte, champ radio select, champ date
Sur le champ photo ça ne marche pas, mais je doute qu'on en verrouille.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0001-forms-implement-locked-fields-by-renaming-and-widget.patch 0001-forms-implement-locked-fields-by-renaming-and-widget.patch ajouté
- Fichier 0002-add-support-for-dj1.8-to-rebase-fixup.patch 0002-add-support-for-dj1.8-to-rebase-fixup.patch ajouté
Voilà le dernier test passe en Django 1.8.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0001-forms-implement-locked-fields-by-renaming-and-widget.patch 0001-forms-implement-locked-fields-by-renaming-and-widget.patch ajouté
- Fichier 0003-last-fixes-to-fixup-rebase.patch 0003-last-fixes-to-fixup-rebase.patch ajouté
- Fichier 0002-add-support-for-dj1.8-to-rebase-fixup.patch 0002-add-support-for-dj1.8-to-rebase-fixup.patch ajouté
Yep bien vu j'ai ajouté d'autres types d'attributs aux tests et effectivement il restait des bugs.
Mis à jour par Nicolas Roche il y a presque 5 ans
- Statut changé de Solution proposée à Solution validée
Ya pas moyen, les mixins me font toujours aussi mal à la tête,
mais vu le HTML produit, on a bien le résultat attendu : les champs vérifiés sont figés.
Mis à jour par Frédéric Péters il y a presque 5 ans
Sur cette partie-ci supprimée :
# make sure verified fields are not modified for av in models.AttributeValue.objects.with_owner( self.instance).filter(verified=True): self.cleaned_data[av.attribute.name] = av.to_python()
pour me rassurer sur l'impossibilité qu'un POST altéré touche les données, je propose ce patch supplémentaire sur les tests :
--- a/tests/test_profile.py +++ b/tests/test_profile.py @@ -51,7 +51,7 @@ def test_account_edit_view(app, simple_user): resp = resp.form.submit().follow() assert phone.get_value(simple_user) == '0123456789' - resp = app.get(url, status=200) + resp = resp1 = app.get(url, status=200) resp.form.set('edit-profile-phone', '9876543210') resp = resp.form.submit('cancel').follow() assert phone.get_value(simple_user) == '0123456789' @@ -74,6 +74,11 @@ def test_account_edit_view(app, simple_user): assert title.get_value(simple_user) == 'Mr' assert agreement.get_value(simple_user) is True + # check submitting modified data for a locked field doesn't change it + resp1.form.set('edit-profile-phone', '9876543210') + resp = resp1.form.submit().follow() + assert phone.get_value(simple_user) == '0123456789' + phone.disabled = True phone.save() resp = app.get(url, status=200)
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Fichier 0001-forms-implement-locked-fields-by-renaming-and-widget.patch 0001-forms-implement-locked-fields-by-renaming-and-widget.patch ajouté
- Statut changé de Solution validée à Solution proposée
Avec toutes vos remarques.
Mis à jour par Nicolas Roche il y a presque 5 ans
- Statut changé de Solution proposée à Solution validée
A propos de l'intégration du patch ci-dessus,
j'ai l'impression que tu oublies de tenter de modifier la valeur quand tu re-soumets le formulaire :
++ old_resp.form.set('edit-profile-phone', '9876543210') resp = old_resp.form.submit() assert phone.get_value(simple_user) == '0123456789'
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
Nicolas Roche a écrit :
A propos de l'intégration du patch ci-dessus,
j'ai l'impression que tu oublies de tenter de modifier la valeur quand tu re-soumets le formulaire :
[...]
old_resp.form conserve les valeurs définie au premier usage, donc je ne pense pas qu'il y ait un souci.
Mis à jour par Nicolas Roche il y a presque 5 ans
Yep, en effet.
(Pdb) old_resp.form['edit-profile-phone']._value '1234'
C'est bon pour moi.
Mis à jour par Benjamin Dauvergne il y a presque 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 6691d5645253055fdee03b26780a1ca8d2e71559 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Thu May 9 18:51:56 2019 +0200 forms: implement locked fields by renaming and widget change (#32954) It simplifies the code (no need to implement a special clean() method) and it covers the case of field with widget not supporting the readonly HTML attribute like those based on <select> or <input type="radio"> tags.
Mis à jour par Frédéric Péters il y a presque 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
forms: implement locked fields by renaming and widget change (#32954)
It simplifies the code (no need to implement a special clean() method)
and it covers the case of field with widget not supporting the readonly
HTML attribute like those based on <select> or <input type="radio">
tags.