J'ai une fonction qui appelle actuellement Models.object.get()
qui renvoie soit 0 soit 1 objet modèle. S'il renvoie 0, je crée une nouvelle instance de modèle dans le fichier except DoesNotExist
de la fonction. Sinon, je voudrais mettre à jour les champs dans l'instance préexistante, sans en créer une nouvelle. À l'origine, j'essayais d'appeler .update()
sur l'instance qui a été trouvée, mais .update()
semble ne pouvoir être appelé que sur un QuerySets. Comment puis-je modifier une douzaine de champs, sans appeler .filter()
et en comparant les longueurs pour savoir si je dois créer ou mettre à jour une instance préexistante ?
Réponses
Trop de publicités?Comme @Nils l'a mentionné, vous pouvez utiliser la fonction update_fields
de l'argument mot-clé de la save()
pour spécifier manuellement les champs à mettre à jour.
obj_instance = Model.objects.get(field=value)
obj_instance.field = new_value
obj_instance.field2 = new_value2
obj_instance.save(update_fields=['field', 'field2'])
En update_fields
La valeur doit être une liste des champs à mettre à jour sous forme de chaînes de caractères.
Voir https://docs.djangoproject.com/en/2.1/ref/models/instances/#specifying-which-fields-to-save
Mettre à jour :
1 - exemple individuel : récupérer l'instance et la mettre à jour manuellement get() récupérer l'objet individuel
post = Post.objects.get(id=1)
post.title = "update title"
post.save()
2 - Ensemble d'instances : utiliser la méthode update() qui ne fonctionne qu'avec le queryset qui serait retourné par la méthode filter()
Post.objects.filter(author='ahmed').update(title='updated title for ahmed')
- Réponses précédentes
- Plus de réponses