2015-05-06 35 views
0

我在Django有一個有趣的(!)問題。 我想更改一個外鍵。我的代碼:Django外鍵不變

print(todos[ind].list) 
print(newList) 
todos[ind].list = newList 
print(todos[ind].list) 
todos[ind].save() 
print(todos[ind].list) 

它的輸出:

oldList 
newList 
oldList 
oldList 

我的模型:

class Todo(models.Model): 
    name = models.CharField(max_length=255) 
    list = models.ForeignKey(TodoList) 

    def __str__(self): 
     return str(self.name) 

和待辦事項列表DEF:

todos = Todo.objects.filter(list = ls) 

其中,LS和newList是:

​​

在此先感謝。

回答

0

todos是類似列表的查詢集,但不是真正的列表。每次訪問todos[ind]時,都會觸發db並加載新的模型實例。

所以,你的代碼更改爲:

todo = todos[ind] 

print(todo.list) 
print(newList) 
todo.list = newList 
print(todo.list) 
todo.save() 
print(todo.list) 

或者你可以緩存查詢集成列表,然後通過索引來訪問的情況下,像你這樣在你的問題:

todos = list(Todo.objects.filter(list=ls)) 

print(todos[ind].list) 
todos[ind].list = newList 
print(todos[ind].list) 
+0

它的工作原理!非常感謝!^_ ^ – user3541386