Django查询:想要计算一个空值

时间:2011-04-06 10:36:54

标签: python django views count

我似乎有一个问题,试图计算。我有一个列表项,每个项目可以存储许多状态,虽然我只对它的最新状态感兴趣。现在看看我的观点。

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_stock显示所有没有最新状态的项目DestroyedPermanent Retrieval。但是这有一个问题。

假设我的数据库中有一些项目 - 比如item1 {in,out,destroyed},item2 = {destroyed,in},item3 = {permanent retrieve},item4 = {}。因为它会查找最新状态,所以会打印{item2}。我现在想要在staock的总项目中打印item4。基本上,item4是没有状态的项目。但由于它不是DestroyedPermanent检索,因此需要将其包含在列表中。但我似乎无法找到解决这个问题的方法。我希望我已经把一切都搞清楚了。

模板

{{total_items_in_stock|length}}

2 个答案:

答案 0 :(得分:0)

试试这个:

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']]

答案 1 :(得分:0)

作为替代方案,您可以为in_stock课程添加StorageItem - 方法。

这些方面的东西:

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()]