跳转周末的逻辑Django / python

时间:2016-10-13 15:04:09

标签: python django python-2.7 datetime weekday

我有这个功能。我需要的是根据当天对我的模型进行一些更改。正如下面显示的if语句,如果“ddate”是今天或明天在我的“pull_ins”列中进行一些更改并将其设置为“Ready to ship”,但如果是后天和第二天,请设置“Not”然而”。这是有效的,但我的问题是我需要跳周末并保持4天的逻辑,任何想法?

作为一个例子,如果今天是Thrusday从今天,明天(周五)-----跳跃周末---星期一,星期二来获得日期。

这就是我得到的:

def Ship_status():   

    week = {0, 1, 2, 3, 4}
    deltaday = timedelta(days=1)
    today = datetime.now().date()
    day = today
    day1 = day + deltaday
    day2 = day1 + deltaday
    day3 = day2 + deltaday


    for i in Report.objects.all():
        if i.ddate.weekday() in week:
            if i.ddate == day:
                i.pull_ins = "Ready to ship"
                i.save()
            if i.date == day1:
                i.pull_ins = "Ready to ship"
                i.save()
            if i.date == day2:
                i.pull_ins = "Not yet"
                i.save()
            if i.date == day3:
                i.pull_ins = "not yet"
                i.save()

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

dateutil.rrule是您可以利用的库。要获得下一个工作日:

from dateutil import rrule
next_weekday = rrule.rrule(rrule.DAILY, count=3, byweekday=(0, 1, 2, 3, 4), dtstart=dt))

因此,在您的查询中,您可以执行以下操作:

def compute_shipping(dt=datetime.datetime.date(), count=2):
    next_weekdays = rrule.rrule(rrule.DAILY, count=count, byweekday=(0, 1, 2, 3, 4), dtstart=dt))
   return list(next_weekdays)

#Ready to ship
Report.objects.filter(ddate__in=compute_shipping()).update(pull_ins="Ready to ship")

#For Not yet
#Query would be similar - just set the appropriate start date