这两种方式在查询集上迭代的区别是什么?

时间:2017-08-20 23:51:05

标签: 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

起初我认为第一种方式不会起作用但是它起作用并且比第二种方式慢得多。

2 个答案:

答案 0 :(得分:1)

第一个是查看单个user对象内的Users属性。

基本上第一个是:

print users[x].user.id

第二个是:

print users[x].id

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

如果Users对象中有用户属性,则第一个是正确的。否则,您只想访问单个id对象的Users属性。

第一个场景的Users类的示例是:

class Users(object):
  user = User()

第二个Senario的Users类的示例是:

class Users(object):
  id = 0

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

答案 1 :(得分:1)

首先访问用户的用户ID

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

第二个访问User表的id字段