Projet

Général

Profil

Bug #5779

rendre les slugs uniques

Ajouté par Thomas Noël il y a plus de 9 ans. Mis à jour il y a plus de 6 ans.

Statut:
Rejeté
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
21 octobre 2014
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:

Description

Actuellement, si on créé un connecter "gdc" appelé "truc", ça fait un slug "truc". Si on crée un second connecteur "truc", ça fait encore un slug "truc" et on arrive sur une erreur : MultipleObjectsReturned.

Il faut rendre les slugs uniques par type de service.


Demandes liées

Bloque Passerelle - Bug #5778: Permettre la modification des slugsFermé21 octobre 2014

Actions
Bloqué par Passerelle - Bug #4696: Migration initiale depuis le script init.dRejeté15 avril 2014

Actions

Historique

#1

Mis à jour par Thomas Noël il y a plus de 9 ans

  • Priorité changé de Normal à Haut

Je monte la priorité parce que ça rend Passerelle inutilisable en cas de fausse manip, et que j'ai pas trop d'idée pour résoudre le soucis (donc oui c'est un peu un appel à l'aide)

#2

Mis à jour par Benjamin Dauvergne il y a plus de 9 ans

#3

Mis à jour par Benjamin Dauvergne il y a plus de 9 ans

Ok le type de service n'est pas un champ, c'est une table. Vous l'avez dans l'os, à moins de déplacer le champ slug du modèle parant au modèle enfant. Ça vous sert encore à quelque chose d'utiliser l'héritage ? J'ai l'impression qu'il n'y a rien de générique et dans ce cas vous pourriez migrer vers de l'héritage abstrait et rendre slug unique.

Comme on est pas dans un monde idéal je rendrais simplement le champ slug unique tout court, je ne vois pas bien la conséquence.

Autre possibilité c'est de tester ça dans le clean du formulaire d'édition, mais ce n'est pas 100% secure sans changer le niveau d'isolation de la base à serialized; dans votre cas ce ne serait pas gênant (dans une application où il y a beaucoup d'écriture ça fait des bugs étrange pour les utilisateurs voir calebasse).

#4

Mis à jour par Thomas Noël il y a plus de 9 ans

Bon, ça doit pouvoir se jouer avec unique=True dans le champ slug de BaseResource. Mais ça va impacter toutes les applications, il faut donc toutes les migrer (au sens "south").

Chemin d'upgrade à la main :
  1. créer les migrations "initiales" pour les applis qui n'en ont pas
  2. faire un migrate --fake
  3. faire la mise à jour du slug avec unique=True
  4. faire un migrate
Mais c'est un chemin impossible en mode "deb/rpm". Il faudrait plutôt avoir un script un peu sioux, à la sauce Python 1.7, c'est à dire :
  • pour chaque application, lors du init.d :
    1. si la table n'existe pas, on syncdb --migrate --fake l'application
    2. si la table existe mais que y'a rien dans l'historique south, on migrate-fake le 0001_initial puis on migrate.
#5

Mis à jour par Frédéric Péters il y a plus de 9 ans

Le bug pour les migrations initiales existe déjà, #4696.

#6

Mis à jour par Frédéric Péters il y a presque 9 ans

  • Priorité changé de Haut à Normal
#7

Mis à jour par Frédéric Péters il y a plus de 6 ans

  • Statut changé de Nouveau à Rejeté

Doublon de #13053 où on va vers un patch.

Formats disponibles : Atom PDF