Skip to main content
 首页 » 编程设计

python之我遇到了一个关于 django Queryset 的棘手问题

2025年05月04日20lidabo

棘手的代码:

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)