Django: запросы ленивы и создание различий в экземплярах - PullRequest
0 голосов
/ 12 декабря 2010

Я пытаюсь записать изменения в объекте модели класса для отправки в creator этого экземпляра класса.

Я создал служебный метод, который различает два объекта, однако он не работает, так как запрос не обрабатывается до более поздних версий:

goal = Goal.objects.get(pk=goal_id)
old_obj = goal

goal.description = "Some new string"
goal.save()

Это не работает, потому что когда я перебираю поля класса модели, значения в старой версии совпадают со значениями в обновленной версии.

Как заставить запрос быть оцененным?

Существует много различных типов объектов, для которых это требуется, поэтому жесткое кодирование, извлекающее значения, не может быть легко обслуживаемо.

Есть мысли?

Спасибо! :-) Eric

Ответы [ 2 ]

1 голос
/ 12 декабря 2010

Это не связано с ленивостью запросов, а является простым следствием семантики присваивания Python.Строка old_obj = goal не создает копию объекта goal, она просто присваивает old_obj в качестве другого имени, указывающего на тот же объект.Изменение атрибутов одного из этих объектов автоматически означает, что другой объект увидит изменения.

Простой способ сделать это - просто запросить у базы данных другую копию:

goal = Goal.objects.get(pk=goal_id)
old_obj = Goal.objects.get(pk=goal_id)

Теперь они будут двумя отдельными объектами, даже если они указывают на одну и ту же строку базы данных, и изменение одного не повлияет на другой.

0 голосов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...