岡野です。

それぞれ、動作に違いがあるので、適切に使い分けるのが良いかと思います。
以下のように動作するので参考にしてください。

>>> 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 にアクセスしてください。

メールによる返信