2016-05-10 9 views
0

クエリーセットで商品番号を取得します。私たちは、これを行うことができ、純粋なPythonで クエリーセットからリストまで、高価な操作ですか?

は、リスト内の項目の番号を見つけるために:

a = 1 
numbers = [1, 2, 3, 4] 
numbers.index(a) 
>>> 0 

でDjangoのクエリセットI can`tこれを行うが、私はこれを行うことができます:

# a - some instance of `model_name` model. 
qs = model_name.objects.all() 
model_name_objects = list(qs) 
model_name_objects.index(a) 

クエリーセットからリストまで、高価な操作ですか?

UPD: ユースケース:

私は2つのモデルがあります:

class Order(models.Model): 
    # some fields 

class OrderItem(models.Model): 
    order = models.ForeignKey(Order, related_name='order_items') 

私はOrder.order_items.all()クエリセットでいくつかのOrderItemインスタンスを持っている数を知りたいです。

UPD2:

私はOrderItemの管理者フィールドに、この番号を表示したい:aはOrder.order_items.all内のOrderItemインスタンス番号()のクエリセットがある

class OrderItemAdmin(admin.ModelAdmin): 
    model = OrderItem 
    # some standart fields   
    list_display = ('display_item_number') 

    def display_item_number(self, obj): 
     b = obj.order.order_items.all().count() 
     return '{}/{}'.format(a, b) 

+0

なぜインデックスを検索したいですか?ユースケースは何ですか? –

+0

@AshwiniChaudharyはusecaseで質問を更新します。 – react

+2

あなたのユースケースでは、その番号で行っていることは表示されません。ほぼ確実にそれを行うより良い方法があります。 –

答えて

0

クエリセット全体を評価することはできません。

for i, item in enumerate(model_name.objects.all()): 
    if item == some_item: 
     break 
else: 
    # iterated through the whole queryset without finding the item 
    i = None 

if i is not None: 
    print i 
else: 
    print "Not found" 

Djangoと基礎となるdbライブラリは、クエリーセットに対して反復処理を行う際に、クエリー結果のページを取得します。あなたは、個々の注文がしかオーダー項目の数が少なくなり、あなたのコードは、それらすべてを表示する必要がありますことを期待して

order = Order.objects.get(pk=123) 
order_items = list(order.order_items.all()) 

私はあなたのユースケースのために推測していますあなたのような何かを検討していますとにかく...このケースでは、クエリーセット全体をリストアップするのは大したことではないでしょう。

関連する問題