Jan 052025
 

Je me suis retrouvé il y a quelques temps avec une problématique, remplacer une chaine par une autre dans un attribut CharField d’un model django.

La première possibilité était de faire tout simplement une belle boucle sur la totalité de mes instances de module, faire le remplacement en python et sauvegarder la nouvelle valeur.


Sauf que j’avais quasiment un million d’objet et que je n’avais pas envie que cela prenne des plombes. Et puis c’était un peu moche.

Du coup j’ai un peu fouillé et miracle, j’ai trouvé une solution que voici.

On commence par définir la fonction de remplacement, tout en django et en SQL.


from django.db.models import F, Func, Value
def replace_func(field_name, old_str, replace_str):
    return Func(
        F(field_name),
        Value(old_str), Value(replace_str),
        function='replace'
    )

Ensuite, il n’y a quasiment plus rien à faire. On va simplement appeler update sur tout les objets et utiliser replace_func.

Par exemple :


MonModele.objects.filter(CONDITIONS).update(
    champ_a_modifier=replace_func("champ_a_modifier",
                                  "str_que_lon_veut_remplacer",
                                  "nouvelle_chaine_de_caractere")

Et voila, c’est fini.

 Posted by at 00:55

  One Response to “Comment remplacer une chaine par une autre dans le champ d’un Model Django”

  1. […] Je me suis retrouvé il y a quelques temps avec une problématique, remplacer une chaine par une autre dans un attribut CharField d’un model django. La premi?… … Read More […]

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.