我知道,Django querysey是一個生成器,而不是一個列表。爲什麼Django的查詢索引操作符返回對象的副本
my_items = Item.objects.filter(id = 1)
my_items[0].name = 'joe'
my_items[0].save()
在示例中,my_items [0]是對象的副本,因此保存不會修改對象。
而這將工作(不會創建一個副本)在Django文檔
my_items = Item.objects.filter(id = 1)
my_item = my_items[0]
my_item.name = 'joe'
my_item.save()
凡(或任何別的地方),它解釋這種現象? 爲什麼他們選擇返回對象的副本而不是對象本身?
但你的描述不是我的問題 - 查詢集尚未評估。我的問題是獲取對象和對象本身的副本。 – yossi
我不明白這不是你的問題。您沒有準確地獲取相同的對象*,因爲*查詢集之前未進行評估,因此每次使用索引運算符時都會查詢數據庫並創建一個新對象。你*認爲*你得到了對象的*副本,但這不是完全正確的。您將獲得兩個不同的Python對象,它們是獨立創建的,但基於相同的數據庫條目。 –
我只使用索引運算符一次,就像你說的查詢集未被評估過。我的問題是爲什麼在評估之後,我得到了一份而不是原件。看看我添加到問題的代碼。如果你說我只想我得到一個對象的副本,那麼爲什麼保存方法不會將它保存到對象? – yossi