以这两种方式迭代查询集有什么区别?



我正在使用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对象内部的user属性。

基本上第一个是做:

print users[x].user.id

二是做:

print users[x].id

其中xfor循环中的当前索引。

如果Users对象内部存在 user 属性,则第一个是正确的。否则,您可能只想访问单个Users对象的id属性。

第一种方案的Users类的示例如下:

class Users(object):
user = User()

第二个Senario的Users类的一个例子是:

class Users(object):
id = 0

我认为可能发生的情况是,当访问Users对象上的user属性时,它可能会再次查询数据库。如果可以包含Users类定义,则更容易理解根本问题。

首次访问用户的 ID

您的User表中user字段,并且您正在访问 a_user.user.id

第二个访问表Userid字段

最新更新