224 votes

Comment sélectionner un enregistrement et le mettre à jour, avec un seul jeu de requêtes dans Django ?

Comment exécuter des instructions update select sur le même queryset plutôt que d'avoir à faire deux requêtes : - une pour sélectionner l'objet - et une pour mettre à jour l'objet

L'équivalent en SQL serait quelque chose comme :

update my_table set field_1 = 'some value' where pk_field = some_value

454voto

Daniel Roseman Points 199743

Utilisez la méthode update de l'objet queryset :

MyModel.objects.filter(pk=some_value).update(field1='some value')

29voto

Riyas Ac Points 1153

1ère méthode

MyTable.objects.filter(pk=some_value).update(field1='some value')

2ème Méthode

q = MyModel.objects.get(pk=some_value)
q.field1 = 'some value'
q.save()

3ème méthode

En utilisant get_object_or_404

q = get_object_or_404(MyModel,pk=some_value)
q.field1 = 'some value'
q.save()

4ème Méthode

si vous avez besoin si pk=some_value existe alors update il est autre sage create nouveau en utilisant update_or_create.

MyModel.objects.update_or_create(pk=some_value,defaults={'field1':'some value'})

2voto

Jamil Noyda Points 381

seulement dans un cas dans serializer choses, vous pouvez mettre à jour de manière très simple !

my_model_serializer = MyModelSerializer(
    instance=my_model, data=validated_data)
if my_model_serializer.is_valid():

    my_model_serializer.save()

seulement dans un cas de form choses !

instance = get_object_or_404(MyModel, id=id)
form = MyForm(request.POST or None, instance=instance)
if form.is_valid():
    form.save()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X