Перезагрузить объект django из базы данных

Возможно ли обновить состояние объекта django из базы данных? Я имею в виду поведение, примерно эквивалентное:

new_self = self.__class__.objects.get(pk=self.pk) for each field of the record: setattr(self, field, getattr(new_self, field)) 

UPD: обнаружена война reopen / wontfix в трекере: http://code.djangoproject.com/ticket/901 . Все еще не понимаю, почему сопровождающим это не нравится.

  • Передавать дополнительные параметры для сигнала post_save
  • Django Admin: использование настраиваемого виджета только для одного поля модели
  • Указание виджета для дополнительного поля формы модели (Django)
  • Как добавить интерактивные ссылки в поле администратора Django?
  • разница между object.create () и object.save () в django orm
  • Модель Django MultipleChoice
  • Получить тело запроса как строку в Django
  • Django make_password слишком медленно для создания большого списка пользователей программно
  • В Django, как разрешить операторам печати работать с Apache WSGI?
  • Для регистратора не найдено никаких обработчиков
  • Взаимодействие с Django / Celery From Java
  • Django Tastypie: как аутентифицировать ключ API
  • 3 Solutions collect form web for “Перезагрузить объект django из базы данных”

    По состоянию на Django 1.8 встроены восстановительные объекты. Ссылка на документы .

     def test_update_result(self): obj = MyModel.objects.create(val=1) MyModel.objects.filter(pk=obj.pk).update(val=F('val') + 1) # At this point obj.val is still 1, but the value in the database # was updated to 2. The object's updated value needs to be reloaded # from the database. obj.refresh_from_db() self.assertEqual(obj.val, 2) 

    Я нашел относительно легко перезагрузить объект из базы данных следующим образом:

     x = X.objects.get(id=x.id) 

    Что касается комментария @ grep, не следует ли это делать:

     # Put this on your base model (or monkey patch it onto django's Model if that's your thing) def reload(self): new_self = self.__class__.objects.get(pk=self.pk) # You may want to clear out the old dict first or perform a selective merge self.__dict__.update(new_self.__dict__) # Use it like this bar.foo = foo assert bar.foo.pk is None foo.save() foo.reload() assert bar.foo is foo and bar.foo.pk is not None 
    Python - лучший язык программирования в мире.