2011-04-06 12 views
0

私はカウントしようとして問題があるようです。私は各アイテムが多くのステータスを保存できるリストアイテムを持っていますが、私はそれが最新のステータスだけに興味があります。今私の意見を見てください。Djangoクエリ:空の値を数えたい

storage_items = StorageItem.objects\ 
       .filter(client=client_id,itemstatushistory__isnull=False)\ 
       .distinct() 

total_items_in_stock = [item for item in storage_items \ 
         if item.itemstatushistory_set.latest().status.description \ 
         not in ['Destroyed','Permanent Retrieval']] 

total_items_in_stockDestroyedPermanent Retrievalと呼ばれる最新の状態を持っていないすべての項目を示します。しかし、これには問題があります。

私のデータベースには、item1 {in、out、destroyed}、item2 = {destroyed、in}、item3 = {permanent retrieve}、item4 = {}などのアイテムがあるとします。最新のステータスを検索するので、{item2}が表示されます。私は今、staockの合計アイテムでitem4も印刷したいと思っています。基本的にitem4はステータスのないアイテムです。しかし、DestroyedまたはPermanent Retrievalではないので、リストに含める必要があります。しかし、私はこれの方法を見つけることができないようです。私はすべてを明確にしたことを願っています。あなたはStorageItemクラスにin_stock -methodを追加することができます別の方法として

storage_items = models.StorageItem.objects.filter(client=client_id).distinct() 

total_items_in_stock = [item for item in storage_items 
     if not item.itemstatushistory_set.exists() or 
      item.itemstatushistory_set.latest().status.description not in ['Destroyed','Permanent Retrieval']] 

答えて

0

テンプレート

{{total_items_in_stock|length}} 
0

はこれを試してみてください。これらの線に沿って

何か:

def in_stock(self): 
    if 'destroyed' and 'permanent_retrieval' not in self.itemstatushistory_set.latest().status.description: 
     return True 

次に、あなたがあなたのリストの内包を簡素化することができます:

total_items_in_stock = [item for item in storage_items if item.in_stock()] 
+0

あなたは 'total_items_in_stock'を定義する部分に何らかの理由で無効な構文を取得しているように見えます – Shehzad009

関連する問題