Python 以这两种方式迭代查询集有什么区别?
我在使用Django构建我的项目时遇到了这两种方法 一种方法是:Python 以这两种方式迭代查询集有什么区别?,python,django,django-models,Python,Django,Django Models,我在使用Django构建我的项目时遇到了这两种方法 一种方法是: users = Users.objects.filter(is_verified=True) for user in users: print user.user.id 第二种方式是: users = Users.objects.filter(is_verified=True) for user in users: print user.id 起初,我认为第一种方法不起作用,但它起作用了,而且比第二种方法慢
users = Users.objects.filter(is_verified=True)
for user in users:
print user.user.id
第二种方式是:
users = Users.objects.filter(is_verified=True)
for user in users:
print user.id
起初,我认为第一种方法不起作用,但它起作用了,而且比第二种方法慢得多。第一种方法是查看单个
用户
对象内部的用户
属性
基本上第一个是做:
打印用户[x].user.id
第二是做:
打印用户[x].id
其中x
是for
循环中的当前索引
如果Users
对象中有用户属性,则第一个属性是正确的。否则,您只需要访问单个用户
对象的id
属性
第一个场景的Users
类示例如下:
class Users(object):
user = User()
class Users(object):
id = 0
第二个senario的Users
类示例如下:
class Users(object):
user = User()
class Users(object):
id = 0
我认为可能发生的情况是,当访问
Users
对象上的user
属性时,它可能再次查询数据库。如果可以包含用户
类定义,则更容易理解根本问题。第一个问题是查看单个用户
对象内部的用户
属性
基本上第一个是做:
打印用户[x].user.id
第二是做:
打印用户[x].id
其中x
是for
循环中的当前索引
如果Users
对象中有用户属性,则第一个属性是正确的。否则,您只需要访问单个用户
对象的id
属性
第一个场景的Users
类示例如下:
class Users(object):
user = User()
class Users(object):
id = 0
第二个senario的Users
类示例如下:
class Users(object):
user = User()
class Users(object):
id = 0
我认为可能发生的情况是,当访问
Users
对象上的user
属性时,它可能再次查询数据库。如果可以包含用户
类定义,则更容易理解根本问题。首先访问用户的用户id
您的User
表中有User
字段,您正在访问一个_User.User.id
第二次访问
用户
表的id
字段第一次访问用户的用户id
您的User
表中有User
字段,您正在访问一个_User.User.id
第二次访问User
表的id
字段