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

Django query: Want to count an empty value

我想数数好像有问题。我有一个列表项,每个项目可以存储许多状态,尽管我只对它的最新状态感兴趣。现在看看我的观点。

1
2
3
4
5
6
7
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。因为它查找最新状态,所以将打印项2。我现在想在Staock中打印项目4。基本上,项目4是一个没有状态的项目。但由于它不是DestroyedPermanent检索,因此需要将其包括在列表中。但我似乎找不到解决这个问题的方法。我希望我把一切都说清楚了。

模板

1
{{total_items_in_stock|length}}


作为一种替代方法,您可以将一个in_stock方法添加到您的StorageItem类中。

沿着这些线的东西:

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

然后你可以简化你的列表理解:

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

试试这个:

1
2
3
4
5
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']]