2010-12-12 2 views
0

Я пытаюсь обратить внимание на изменения объекта модели класса, который будет отправлен в creator этого экземпляра класса.Django: запросы Lazy и создание экземпляра Diff

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

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

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

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

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

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

Любые мысли?

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

ответ

1

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

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

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

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

0
+0

Спасибо Даниил. Однако я использую .get() и фактически не получаю возвращаемый запрос, а скорее экземпляр класса. Я обновил название своего сообщения, так как это сбивало с толку. – 2010-12-12 18:06:31

Смежные вопросы