Запрос Django: хочу посчитать пустое значение - PullRequest
0 голосов
/ 06 апреля 2011

Кажется, у меня проблема с подсчетом.У меня есть элемент списка, в котором каждый элемент может хранить много статусов, хотя меня интересует только его последний статус.Теперь посмотрите на мои взгляды.

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, уничтожено}, item2 = {уничтожено, in}, item3 = {постоянное получение}, item4 = {}.Поскольку он ищет последний статус, он напечатает {item2}.Теперь я хочу напечатать item4 в общем количестве элементов в стеке.В основном item4 - это предмет без статуса.Но поскольку он не был Destroyed или Permanent Retrieval, его необходимо включить в список.Но я не могу найти выход из этого.Надеюсь, я все прояснил.

Шаблон

{{total_items_in_stock|length}}

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

В качестве альтернативы вы можете добавить 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()]
0 голосов
/ 06 апреля 2011

Попробуйте это:

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