棘手的代码:
user = User.objects.filter(id=123)
user[0].last_name = 'foo'
user[0].save() # Cannot be saved.
id(user[0]) # 32131
id(user[0]) # 44232 ( different )
用户不能以这种方式保存。
普通代码:
user = User.objects.filter(id=123)
if user:
user[0].last_name = 'foo'
user[0].save() # Saved successfully.
id(user[0]) # 32131
id(user[0]) # 32131 ( same )
那么,问题是什么?
请您参考如下方法:
在第一个变体中,您的user 查询集尚未评估。所以每次你写 user[0] ORM 都会对 DB 进行独立查询。在第二个变体中,查询集被评估并像普通的 Python 列表一样工作。
顺便说一句,如果您只想要一行,请使用 get:
user = User.objects.get(id=123)
