2015-09-23 84 views
0

我有這樣的代碼:Django的 - 使用過濾器/排除不起作用

import datetime 

today_min = datetime.datetime.combine(datetime.date.today(), datetime.time.min) 

pickingYesterday = Order.objects.exclude(actionorder__type__name = 'In process',actionorder__dateCreation__lt=today_min).filter(actionorder__type__name = 'Completed', actionorder__dateCreation__lt=today_min).count() 

我想篩選出所有這些條件適用於 昨天的訂單。

class Order(models.Model): 

class Type(models.Model): 
    name = models.CharField(max_length = 100) 

class actionOrder(models.Model): 
    order = models.ForeignKey(Order) 
    Type = models.ForeignKey(Type) 
    dateCreation = models.DateTimeField(auto_now = True) 

回答

0

你可以通過做得到昨天的日期:

from datetime import date, datetime, timedelta 
today = date.today() 
today = datetime(today.year, today.month, today.date) 
yesterday = today - timedelta(days=1) 

如果我理解正確的話,你想獲得訂單,訂單行動「完成」從今天開始,但沒有「完全」昨天,對嗎?如果是這樣,你可以這樣做:

pickingYesterday = Order.objects.filter(actionorder__type__name='Completed', 
             actionorder__dateCreation__gte=today) \ 
           .exclude(actionorder__type__name='Completed', 
             actionorder__dateCreation__lte=today, 
             actionorder__dateCreation__gte=yesterday).count() 
+0

不僅'已完成',有可能訂單可以有一個或多個行動從昨天開始,但今天已經完成。該訂單必須退回,但如果訂單昨天完成,則不應退回。 –

+0

我忘記說dateCreation是一個日期時間字段,因此我以這種方式計算日期。 –

+0

您需要編輯您的帖子才能向我們展示您的「Order」和「ActionOrder」模型。聽起來像你的'ActionOrder'有一個外鍵給'Order'和'ActionOrder'記錄一個命令的狀態,對嗎?如果是這樣,你的查詢根本不起作用。 –

0

看我試試這個和作品,意見?

from django.db.models import Q 
import datetime 

today_min = datetime.datetime.combine(datetime.date.today(), datetime.time.min) 

pickingYesterday = Order.objects.filter(actionorder__type__name = 'Completed', actionorder__dateCreation__lt=today_min).filter(actionorder__type__name = 'In process',actionorder__dateCreation__gte=today_min).count() 
pickingYesterday += Order.objects.filter(actionorder__type__name = 'Completed', actionorder__dateCreation__lt=today_min).filter(~Q(actionorder__type__name = 'In process')).count()