我相信每次运行obj[0]
时,Django都会返回到数据库并运行查询。你可以看到,通过使用django.db.connection
执行的查询:
>>> from django.db import connection
>>> obj = ModelA.objects.filter(flag=True)
>>> print(connection.queries)
[]
>>> o = obj[0]
>>> print(connection.queries)
[{'time': '0.001', 'sql': 'SELECT "myapp_modela"."id", "myapp_modela"."flag" FROM "myapp_modela" WHERE "myapp_modela"."flag" = 1 LIMIT 1'}]
>>> o.flag = False
>>> o.save()
>>> print(connection.queries)
[{'time': '0.001', 'sql': 'SELECT "myapp_modela"."id", "myapp_modela"."flag" FROM "myapp_modela" WHERE "myapp_modela"."flag" = 1 LIMIT 1'},
{'time': '0.000', 'sql': 'BEGIN'},
{'time': '0.002', 'sql': 'UPDATE "myapp_modela" SET "flag" = 0 WHERE "myapp_modela"."id" = 1'}]
>>> o = obj[0]
>>> print(connection.queries)
[{'time': '0.001', 'sql': 'SELECT "myapp_modela"."id", "myapp_modela"."flag" FROM "myapp_modela" WHERE "myapp_modela"."flag" = 1 LIMIT 1'},
{'time': '0.000', 'sql': 'BEGIN'},
{'time': '0.002', 'sql': 'UPDATE "myapp_modela" SET "flag" = 0 WHERE "myapp_modela"."id" = 1'},
{'time': '0.000', 'sql': 'SELECT "myapp_modela"."id", "myapp_modela"."flag" FROM "myapp_modela" WHERE "myapp_modela"."flag" = 1 LIMIT 1'}]
你怎么知道它是第二个对象?你如何评价它?可能 - 这是问题,当您再次评估查询集时,第二个对象成为第一个匹配条件的对象? – karthikr
我'打印'它。对象的'id'。 – PythonEnthusiast
看看[首页](https://docs.djangoproject.com/en/1.10/ref/models/querysets/#first) –