1

有没有更好的方法来做到这一点

us = User.objects.filter(id=someid)
if us.exists():
   u = us[0]

正如我在 sql 日志中看到的,us.exists() 将执行一个 sql 查询,然后 u = us[0] 将执行另一个查询。所以我们必须做 2 次查询才能完成任务。我只是想寻求一种更好的方法来做到这一点

4

2 回答 2

6

假设id是唯一的,您可能应该请求宽恕,而不是许可:

try:
    u = User.objects.get(id=someid)
except User.DoesNotExist:
    # do whatever you should do if user does not exist
于 2012-11-04T13:26:03.860 回答
4

.get()不使用 django 查询集缓存。因此,如果您真的想使用和重用查询集,更好的方法是捕获IndexError

us = User.objects.filter(id=someid)
try:
   u = us[0]
except IndexError:
    #item does not exist.
于 2012-11-04T13:59:26.670 回答