メモです。
# filter(id__in=[1266, 1267]) は all() に置き換えても同様 # モデルオブジェクト取得の基本形 Product.objects.filter(id__in=[1266, 1267]) #結果: <QuerySet [<Product: PRD-0001A>, <Product: PRD-0002/0002M>]> # values() の使い方例 Product.objects.filter(id__in=[1266, 1267]).values('id', 'name') #結果: <QuerySet [{'id': 1266, 'name': 'PRD-0001A'}, {'id': 1267, 'name': 'PRD-0002/0002M'}]> #ValuesQuerySetと呼ばれるデータ型 # get()で一つのレコードだけ扱う場合 Product.objects.filter(id__in=[1266, 1267]).get(id=1266) #結果: <Product: PRD-0001A> Product.objects.filter(id__in=[1266, 1267]).values('id', 'name').get(id=1266) #結果: {'id': 1266, 'name': 'PRD-0001A'} # values_list() の使い方 *タプルを返す Product.objects.filter(id__in=[1266, 1267]).values_list('id', 'name') #結果: <QuerySet [(1266, 'PRD-0001A'), (1267, 'PRD-0002/0002M')]> Product.objects.filter(id__in=[1266, 1267]).values_list('id', 'name').get(id=1266) #結果: (1266, 'PRD-0001A') list(Product.objects.filter(id__in=[1266, 1267]).values_list('id', 'name')) #結果: [(1266, 'PRD-0001A'), (1267, 'PRD-0002/0002M')] # get()で一つのレコードだけ扱う場合 Product.objects.filter(id__in=[1266, 1267]).values_list('name').get(id=1266) #結果: ('PRD-0001A',) Product.objects.filter(id__in=[1266, 1267]).values_list('name', flat=True).get(id=1266) #結果: 'PRD-0001A' # flat=True の例 *フィールドは一つだけ指定します。複数の場合エラーになります。 Product.objects.filter(id__in=[1266, 1267]).values_list('name') #flat=True なし #結果: <QuerySet [('PRD-0001A',), ('PRD-0002/0002M',)]> Product.objects.filter(id__in=[1266, 1267]).values_list('name', flat=True) #flat=Ture あり #結果: <QuerySet ['PRD-0001A', 'PRD-0002/0002M']> list(Product.objects.filter(id__in=[1266, 1267]).values_list('name')) #flat=True なし #結果: [('PRD-0001A',), ('PRD-0002/0002M',)] list(Product.objects.filter(id__in=[1266, 1267]).values_list('name', flat=True)) #flat=Ture あり #結果: ['PRD-0001A', 'PRD-0002/0002M'] # 外部キーも参照できる Product.objects.filter(id__in=[1266, 1267]).values('id', 'name', 'category1__name') #結果: <QuerySet [{'id': 1266, 'name': 'PRD-0001A', 'category1__name': 'Wheel and axle'}, {'id': 1267, 'name': 'PRD-0002/0002M', 'category1__name': 'Pulley'}]>
0 件のコメント:
コメントを投稿