我似乎有一个问题,试图计算。我有一个列表项,每个项目可以存储许多状态,虽然我只对它的最新状态感兴趣。现在看看我的观点。
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
显示所有没有最新状态的项目Destroyed
和Permanent Retrieval
。但是这有一个问题。
假设我的数据库中有一些项目 - 比如item1 {in,out,destroyed},item2 = {destroyed,in},item3 = {permanent retrieve},item4 = {}。因为它会查找最新状态,所以会打印{item2}。我现在想要在staock的总项目中打印item4。基本上,item4是没有状态的项目。但由于它不是Destroyed
或Permanent
检索,因此需要将其包含在列表中。但我似乎无法找到解决这个问题的方法。我希望我已经把一切都搞清楚了。
模板
{{total_items_in_stock|length}}
答案 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()]