Projet

Général

Profil

Development #64575

possibilité d'un POST pour modifier un seul champ d'une cellule

Ajouté par Frédéric Péters il y a environ 2 ans. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
26 avril 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Pour faire l'édition "front" sur doc-publik.entrouvert.com il y avait ce code,

      $('.save').on('click', function() {
        var csrf = $('[name=csrfmiddlewaretoken]').val();
        attr = this.div_zone.edit_url.replace(/^.*(data_textcell.*)\//, 'c$1-text');
        var params = {};
        params[attr] = this.div_zone.innerHTML;
        params['csrfmiddlewaretoken'] = csrf;
        $.post(this.div_zone.edit_url, params).fail(function() {
          $(this).css('background', 'red');
        });
        return false;
      });

Prendre le texte et en faire un POST sur l'url de modification de la cellule.

Avec le passage en onglets il y a davantage de paramètres et ça ne marche plus de juste passer le texte, on obtient en retour une erreur comme quoi le champ visibilité est obligatoire.

C'est peut-être aussi l'occasion de faire un truc plus clean, en posant basiquement djangorestframework ?


Fichiers

Révisions associées

Révision cdbb87ec (diff)
Ajouté par Frédéric Péters il y a plus d'un an

manager: add view to edit a single attribute with an ajax request (#64575)

Historique

#1

Mis à jour par Frédéric Péters il y a plus d'un an

Voilà; l'ambition est uniquement de permettre de restaurer l'édition "front" sur le site de la doc (parce que c'est utile en soit, et pour guider godo #59608), j'ai laissé de côté l'idée de passer par djangorestframework.

#2

Mis à jour par Lauréline Guérin il y a plus d'un an

Là ça marche pour n'importe quel type de cellule, et n'importe quel champ du model, on voudrait pas restreindre un peu ?

#3

Mis à jour par Frédéric Péters il y a plus d'un an

Je trouvais ça bien de laisser générique, même si le cas précis concerne juste l'attibut text des TextCell, sur l'idée qu'éventuellement ça servirait sur quelque chose que je n'imagine pas encore.

#4

Mis à jour par Lauréline Guérin il y a plus d'un an

Ok mais ça permet de bypasser d'éventuels checks des Forms et ModelForms habituellement utilisés. C'est pas gênant ?

#5

Mis à jour par Frédéric Péters il y a plus d'un an

Pour moi on ne permettait pas trop d'éviter les contrôles, j'avais mimé le code sur celui qu'on a dans PageEditCellView,

                for tab in self.object.get_manager_tabs():
                    if tab.get('fields'):
                        tab['form'] = forms.models.modelform_factory(
                            self.object.__class__, fields=tab['fields']
                        )
                    form = tab['form'](**self.get_form_kwargs())
                    if form.is_valid():
                        self.object = form.save()
                    else:
                        tab_error_forms[tab['slug']] = form
                        response['errorlist'][tab['slug']] = form.errors

mais j'avais raté qu'on avait (bien sûr) des cas sans tab.get('fields'), avec une classe de formulaire spécifique.

On n'a pas de moyen sûr pour associer un attribut à un onglet pour trouver la classe correspondante, peut-être qu'alors c'est en effet plus prudent de limiter. Mais même en écrivant ça j'hésite, parce que ça m'ennuie de faire quelque chose qui va juste être ok pour les cellules texte, et je me dis que l'appelant ça sera toujours nous et qu'on fera attention.

J'ai modifié dans ce nouveau patch pour 1/ utiliser le form_class donné par l'objet (get_default_form_class) et 2/ vérifier que l'attribut fait partie de ceux retournés par get_default_form_fields(). Ça me semble fournir un milieu adéquat entre tout autoriser et limiter au seul cas actuel.

#6

Mis à jour par Lauréline Guérin il y a plus d'un an

  • Statut changé de Solution proposée à Solution validée
#7

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Solution validée à Résolu (à déployer)
commit cdbb87ecf137ec84f25e88bead3d62a83b407d25
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Sep 10 20:48:43 2022 +0200

    manager: add view to edit a single attribute with an ajax request (#64575)
#8

Mis à jour par Transition automatique il y a plus d'un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#9

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF