【问题标题】:Django query: Want to count an empty valueDjango查询:想要计算一个空值
【发布时间】:2011-07-30 17:09:51
【问题描述】:

我似乎在数数时遇到了问题。我有一个列表项,其中每个项都可以存储许多状态,尽管我只对它的最新状态感兴趣。现在看看我的看法。

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, destroy}, item2 = {destroyed, in}, item3 = {permanent retrieve}, item4 = {}。因为它寻找最新的状态,所以它会打印 {item2}。我现在想在库存中的总项目中打印 item4。基本上 item4 是没有状态的项目。但由于它不是Destroyed 或Permanent 检索,因此需要将其包含在列表中。但我似乎找不到解决办法。我希望我已经把一切都说清楚了。

模板

{{total_items_in_stock|length}}

【问题讨论】:

    标签: python django views count


    【解决方案1】:

    作为替代方案,您可以将 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()]
    

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

      • 似乎由于某种原因在您定义 total_items_in_stock 的部分获得了无效语法
      猜你喜欢
      • 1970-01-01
      • 2010-11-19
      • 2019-07-06
      • 2018-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      相关资源
      最近更新 更多