Чем отличаются refresh_from_db и ручное получение?
В настоящее время я работаю над проектом, с которым не очень хорошо знаком, и пытаюсь удалить все упомянутые методы перезагрузки, которые выглядят следующим образом:
def reload(self):
return self.__class__.objects.get(pk=self.pk)
Поскольку они были добавлены, когда refresh_from_db
еще не было в Django, они повсюду и используются для получения обновленной модели из базы данных. Изменение метода на
def reload(self):
self.refresh_from_db()
return self
в моем понимании должны давать одинаковый результат. Однако при выполнении тестов они не работают, потому что, очевидно, произошли изменения.
Я уже исследовал, если метод refresh_from_db
переписывается, но модель является обычной django.models.Model
.
EDIT: Пример неудачного теста
======================================================================
FAIL: test_modify_child_while_pending (cms.tests.test_publisher.PublishingTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/django-cms/cms/tests/test_publisher.py", line 512, in test_modify_child_while_pending
self.assertTrue(child.is_published('en'))
AssertionError: False is not true
РЕДАКТ 2: Тестирование кода
def test_modify_child_while_pending(self):
home = self.create_page("Home", published=True, in_navigation=True)
child = self.create_page("Child", published=True, parent=home,
in_navigation=False)
home.reload().unpublish('en')
self.assertPending(child.reload())
child.refresh_from_db()
child.in_navigation = True
child.save()
# assert draft dirty
self.assertTrue(child.is_published('en'))