Можно ли обновить состояние объекта django из базы данных? Я имею в виду поведение примерно эквивалентно:
new_self = self.__class__.objects.get(pk=self.pk)
for each field of the record:
setattr(self, field, getattr(new_self, field))
ОБНОВЛЕНИЕ: обнаружен переоткрытый / wontfix войны в трекере: http://code.djangoproject.com/ticket/901 . До сих пор не понимаю, почему сопровождающим это не нравится.
Это кажется ненужной функцией; уже возможно просто повторно найти объект из базы данных.
—
Стефан
Это не подходит, потому что объекты модели Django являются прокси. Если вы получаете одну и ту же строку таблицы на два объекта - x1 = X.objects.get (id = 1); x2 = X.objects.get (id = 1), они будут проверяться как равные, но это разные объекты и состояние не является общим. Вы можете изменить оба независимо и сохранить их - последний сохраненный определяет состояние строки в базе данных. Поэтому корректно перезагрузить с простым присваиванием - x1 = X.objects.get (id = 1). Наличие метода перезагрузки привело бы к тому, что многие люди ошибочно поняли, что x1.f = 'new value'; (x1.f == x2.f) верно.
—
Пол Уипп
commmit
. Как только вы это сделаете, вам придется подождать, пока следующая транзакция SQL не будет зафиксирована. Зачем это делать? Как долго вы собираетесь ждать следующей транзакции?