2017-08-20 5 views
0

私はプロジェクトをビルドするためにDjangoを使用していましたが、この2つの方法に遭遇しました。これら2つの方法でクエリーセットを反復する違いは何ですか?

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 

は、最初に私は文句を言わない最初の方法を考えた仕事が、それは働いていたし、その後第二の方法は非常に遅かったです。

答えて

1

最初の1つはUsersオブジェクト内のuserプロパティを調べています。

基本的に最初のものをやっている:

print users[x].user.id

第がやっている:

print users[x].id

ここxforループにおける現在のインデックスです。

Usersオブジェクト内にユーザープロパティがある場合は、最初のものが正しいです。それ以外の場合は、Usersオブジェクトのidプロパティにアクセスするだけです。

最初のシナリオのためのUsersクラスの例は次のようになります。

class Users(object): 
    user = User() 

Usersクラスの例二senarioのために次のようになります。

class Users(object): 
    id = 0 

私はおそらく何が起こっていると考えていますUsersオブジェクトのuserプロパティにアクセスすると、データベースに再度照会している可能性があります。 Usersクラス定義を含めることができれば、根本的な問題を理解しやすくなります。

1

まずアクセスユーザーのユーザーのID

あなたUserの表は、それにuserフィールドを持って、あなたは

a_user.user.id 2つ目のアクセス Userテーブルの idフィールドにアクセスしています
関連する問題