Résolue

Update() avev les queryset django

# Bases de données # Django # Documentation

Gabriel Trouvé

Mentor

Bonsoir,

J'ai regardé un peu dans la doc et apparemment update() ne s'utilise que lorsqu'on filtre en général ?

Si je comprends bien ça ne charge pas l'objet en mémoire et c'est un sacré gain de temps pour des modifications de masse ?

Merci d'avance

def default_address_view(request, pk):
    user = request.user
    user.adresses.filter(default=True).update(default=False)

    # Définir la nouvelle adresse comme adresse par défaut
    updated_rows = user.adresses.filter(pk=pk).update(default=True)

    # Vérifier si l'adresse avec `pk=pk` a été mise à jour
    if not updated_rows:
        # Gérer l'erreur ici, par exemple en retournant une réponse d'erreur
        return HttpResponse("Adresse non trouvée", status=404)

    return redirect("accounts:profile")

Salut Gab !

Alors update permet de mettre à jour un queryset, donc ça peut contenir de 1 à N entrées. Ça dépend du nombre d'entrées dans ton queryset du coup mais c'est effectivement beaucoup plus efficace parce que ça va faire une seule requête SQL pour la mise à jour.

L'erreur serait de boucler sur un queryset pour mettre à jour les données une à une. Là ça peut prendre des mois (littéralement 😅) si tu as une base de données avec des milliards d'entrées.

Gabriel Trouvé

Mentor

lol ok !

donc en theory tu pourrais faire un objects.all(). update()

?

j'avais cru comprendre qu'on ne pouvait passer que par filtrer en fait.

Merci Thibault !

Tu peux l'utiliser sur un queryset : all et filter te retournent tous les deux un queryset, donc ça marche oui :)

Gabriel Trouvé

Mentor

merci !

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.