2015-05-06 92 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