Est-il possible d'actualiser l'état d'un objet django à partir de la base de données? Je veux dire un comportement à peu près équivalent à:
new_self = self.__class__.objects.get(pk=self.pk)
for each field of the record:
setattr(self, field, getattr(new_self, field))
MISE À JOUR: Nous avons trouvé une guerre reopen / wontfix dans le tracker: http://code.djangoproject.com/ticket/901 . Je ne comprends toujours pas pourquoi les responsables n'aiment pas ça.
commmit
. Une fois que vous avez fait cela, vous devrez attendre que la prochaine transaction SQL soit validée. Pourquoi faire ça? Combien de temps allez-vous attendre la prochaine transaction?Réponses:
Depuis Django 1.8, des objets rafraîchissants sont intégrés. Lien vers la documentation .
la source
refresh_from_db
ne mettra à jour que les champs déjà remplis.DoesNotExist
exception si l'objet sous-jacent a été supprimé lors de l'appelrefresh_from_db
. FYI.J'ai trouvé relativement facile de recharger l'objet à partir de la base de données comme ceci:
la source
refresh_from_db
résout tous ces problèmes.En référence au commentaire de @ grep, ne devrait-il pas être possible de faire:
la source
refresh_from_db
méthode.Comme @Flimm l'a souligné, c'est une solution vraiment géniale:
Cela recharge toutes les données de la base de données dans l'objet.
la source