Bug #13792
API : Utiliser les slugs des agendas, plutôt que les id
0%
Fichiers
Révisions associées
agendas: add slug to MeetingType model (#13792)
api: update meeting types API to be based on slugs (#13792)
Historique
Mis à jour par Frédéric Péters il y a plus de 7 ans
- Fichier 0001-api-update-datetimes-fillslot-API-to-get-agenda-by-s.patch 0001-api-update-datetimes-fillslot-API-to-get-agenda-by-s.patch ajouté
- Fichier 0002-agendas-add-slug-to-MeetingType-model-13792.patch 0002-agendas-add-slug-to-MeetingType-model-13792.patch ajouté
- Fichier 0003-api-update-meeting-types-API-to-be-based-on-slugs-13.patch 0003-api-update-meeting-types-API-to-be-based-on-slugs-13.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Mis à jour par Thomas Noël il y a plus de 7 ans
0002: dans la migration j'ai l'impression que « meeting_type.slug = slugify(meeting_type.label) » est inutile, parce que le meeting_type.save() fera tout le travail (et mieux, en plus).
À part ça, j'aurais aimé des "# legacy access from id" dans le code quand on cherche avec les id et non les slugs.
Mis à jour par Frédéric Péters il y a plus de 7 ans
- Fichier 0001-api-update-datetimes-fillslot-API-to-get-agenda-by-s.patch ajouté
- Fichier 0002-agendas-add-slug-to-MeetingType-model-13792.patch ajouté
- Fichier 0003-api-update-meeting-types-API-to-be-based-on-slugs-13.patch ajouté
Thomas Noël a écrit :
0002: dans la migration j'ai l'impression que « meeting_type.slug = slugify(meeting_type.label) » est inutile, parce que le meeting_type.save() fera tout le travail (et mieux, en plus).
C'était mon intention mais ça ne fonctionne pas, parce que la classe MeetingType qu'on récupère là est juste un wrapper créé par le processus de migration, pas la vraie classe MeetingType. (et j'ai décidé que le code plus évolué n'était pas nécessaire vu les déploiements des chrono actuels).
À part ça, j'aurais aimé des "# legacy access from id" dans le code quand on cherche avec les id et non les slugs.
Voilà.
Mis à jour par Frédéric Péters il y a plus de 7 ans
- Fichier
0002-agendas-add-slug-to-MeetingType-model-13792.patchsupprimé
Mis à jour par Frédéric Péters il y a plus de 7 ans
- Fichier
0001-api-update-datetimes-fillslot-API-to-get-agenda-by-s.patchsupprimé
Mis à jour par Frédéric Péters il y a plus de 7 ans
- Fichier
0003-api-update-meeting-types-API-to-be-based-on-slugs-13.patchsupprimé
Mis à jour par Frédéric Péters il y a plus de 7 ans
- Fichier 0003-api-update-meeting-types-API-to-be-based-on-slugs-13.patch 0003-api-update-meeting-types-API-to-be-based-on-slugs-13.patch ajouté
- Fichier 0002-agendas-add-slug-to-MeetingType-model-13792.patch 0002-agendas-add-slug-to-MeetingType-model-13792.patch ajouté
- Fichier 0001-api-update-datetimes-fillslot-API-to-get-agenda-by-s.patch 0001-api-update-datetimes-fillslot-API-to-get-agenda-by-s.patch ajouté
(j'avais ajouté par erreur tous les commentaires dans le dernier patch, les voici distribués correctement)
Mis à jour par Thomas Noël il y a plus de 7 ans
Je me demandais si on pourrait cette fois avoir un unique=True pour le slug d'Agenda, et un unique_together pour MeetingType ? En fait je mets ce commentaire en me demande si on a une raison de ne pas utiliser ces contraintes dans les modèles (on le fait rarement).
Mis à jour par Frédéric Péters il y a plus de 7 ans
Discussion intéressante à avoir à un moment (HowDoWeDoDjangoModels…) (sans y avoir réfléchi assez, je pense que mon approche c'est que les contraintes au niveau de la db sont un dernier garde-fou, un peu comme un assert() dans du code, et qu'il doit donc de toute façon y avoir du code en amont qui s'assure que ces contraintes ne sont de toute façon pas violées).
Mis à jour par Thomas Noël il y a plus de 7 ans
Frédéric Péters a écrit :
Discussion intéressante à avoir à un moment (HowDoWeDoDjangoModels…) (sans y avoir réfléchi assez, je pense que mon approche c'est que les contraintes au niveau de la db sont un dernier garde-fou, un peu comme un assert() dans du code, et qu'il doit donc de toute façon y avoir du code en amont qui s'assure que ces contraintes ne sont de toute façon pas violées).
Je pense que ça ajoute automatiquement des validations sur les modelforms (sinon effectivement, c'est juste un garde fou)
Mis à jour par Thomas Noël il y a plus de 7 ans
Et donc : ack pour l'instant comme cela. On verra par ailleurs si on ajoute l'unicité dans le model.
Mis à jour par Frédéric Péters il y a plus de 7 ans
- Statut changé de En cours à Résolu (à déployer)
commit c33754433fd7a5968054bed18d77b2844fe8dbe3 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Fri Oct 28 19:36:29 2016 +0200 api: update meeting types API to be based on slugs (#13792) commit 6e1fb0aa946552bfb749489d9211a98200807510 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Fri Oct 28 19:06:51 2016 +0200 agendas: add slug to MeetingType model (#13792) commit a233f39dd1bbf64f6e830a8853b50cd449502f59 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Fri Oct 28 17:52:21 2016 +0200 api: update datetimes/fillslot API to get agenda by slug (#13792)
Mis à jour par Frédéric Péters il y a plus de 7 ans
Et j'ai mis à jour la page https://doc-publik.entrouvert.com/admin-fonctionnel/prises-de-rendez-vous/
Mis à jour par Benjamin Dauvergne il y a plus de 7 ans
Frédéric Péters a écrit :
Discussion intéressante à avoir à un moment (HowDoWeDoDjangoModels…) (sans y avoir réfléchi assez, je pense que mon approche c'est que les contraintes au niveau de la db sont un dernier garde-fou, un peu comme un assert() dans du code, et qu'il doit donc de toute façon y avoir du code en amont qui s'assure que ces contraintes ne sont de toute façon pas violées).
Ce n'est pas qu'un garde fou, c'est la seule garantie qu'un get_or_create() pourra être exécuté de manière atomique ou pas, en fait get_or_create() ne rend pas les services escomptés si les attributs (hors defaults
) ne sont pas couverts par un index d'unicité, c'est pour ça qu'en général il faut toujours s'en servir comme ceci:
instance, created = XXX.objects.get_or_create(indexed_attribute1=x, indexed_attribute2=y, defaults=defaults) if not created: for key in defaults: setattr(instance, key, defaults[key]) instance.save()
Mis à jour par Frédéric Péters il y a plus de 7 ans
- Statut changé de Résolu (à déployer) à Fermé
api: update datetimes/fillslot API to get agenda by slug (#13792)