岡野様、

田中です。

的確なアドバイス大変感謝しております。

岡野様のまとめてを拝見させて頂いたことで、
わかっていなかったことがクリアーになりました。

今後id属性に注意しつつ、
users.first().idで統一して行くのが無難だと思いました。

有難うございます。







2015年6月27日土曜日 17時34分58秒 UTC+9 tokibito:
>
> 岡野です。
>
> それぞれ、動作に違いがあるので、適切に使い分けるのが良いかと思います。
> 以下のように動作するので参考にしてください。
>
> >>> users[0].id
>
> users[0] によって、LIMIT 1とOFFSETが指定されたSQLで問い合わせされます(添字が0ならLIMIT 
> 1、添字が0より多い場合はLIMIT1でOFFSET指定)
> レコードが存在する場合は、Userのオブジェクトが返されます。
> レコードがない場合は、IndexError例外が発生します。
>
> >>> users.first().id
>
> users.first() によって、LIMIT 1が指定されたSQLで問い合わせされます
> レコードが存在する場合は、Userのオブジェクトが返されます。
> レコードがない場合は、Noneが返されます。
>  -> Noneのid属性にアクセスしようとして、AttributeErrorが発生します。
>
> >>> users.get().id
>
> users.get() によって、件数を指定しないSQLで問い合わせされます
> レコードが2件以上存在する場合は、MultipleObjectsReturned例外が発生します。
> レコードがない場合は、DoesNotExist例外が発生します。
>
> 以上です。
>
>
> 2015年6月27日土曜日 15時51分11秒 UTC+9 Jun Tanaka:
>>
>> 皆様、
>>
>> 田中と申します。
>>
>> フィルターからのオブジェクトの取り方でご相談です。
>> どなたか詳しい方ご教授いただけないでしょうか。
>>
>>
>> よくある手法として3パターンあります。
>> 私からしてみたらどれも同じ?なのですが、
>>
>>
>> >>> from django.contrib.auth.models import User
>> >>> users = User.objects.filter(id=1)
>> >>> users[0].id
>> 1
>> >>> users.first().id
>> 1
>> >>> users.get().id
>> 1
>>
>>
>> 統一したいので、
>> これは間違いやすい、
>> これがベストなどご意見いただけませんでしょうか?
>> 今django1.6使ってます。
>>
>> 何卒宜しくお願い致します。
>>
>

-- 
-- 
-----------------                       http://djangoproject.jp/                
         -----------------
You received this message because you are subscribed to the Google Groups 
"django-ja" group.
To post to this group, send email to django-ja@googlegroups.com
To unsubscribe from this group, send email to 
django-ja-unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/django-ja
--- 
このメールは Google グループのグループ「django-ja」の登録者に送られています。
このグループから退会し、グループからのメールの配信を停止するには django-ja+unsubscr...@googlegroups.com 
にメールを送信してください。
その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

メールによる返信