2016-09-27 12 views
1

Мне нужно каждый день прыгать в субботу и воскресенье автоматически, поэтому я могу сделать подсчет определенного элемента из модели. Это пример таблицы мне нужно создать:Функция выходных выходных дней? Django/python

Date ------- Order Holds 

Today ------ 45 (wednesday) 

09/09/16 --- 34 (Thursday) 

10/09/16 --- 23 (Friday) 

-----JUMP WEEKEND --- (and keep count in) 

13/09/16 --- 56 (Monday) 

14/09/16 --- 14 (Tuesday) 

Это, как я фильтр, чтобы подсчитать количество трюмов на сегодняшний день, и я могу продолжать получать их, добавляя 1 день:

Это моя модель (models.py):

class Data(models.Model): 
    date = models.DateField(null=True, blank=True) 
    ban = models.CharField(max_length=10) 

Это часть моей логики (views.py)

today = datetime.today() 
tomorrow = today + timedelta(days=1) 
orders = Data.objects.filter(date=today) 
ban = orders.filter(ban__contains="BAN").count() 

Как вы можете видеть в моей логике views.py я могу отфильтровать весь статус BAN с сегодняшней даты, после чего я могу подсчитать их сейчас. Моя проблема в том, что я, если буду фильтровать на завтра, а завтра на пятницу, мне нужно прыгать в субботу и воскресенье. Другими словами, применяйте эту логику каждый день, просто прыгая в выходные.

+0

Поскольку код, показанный работает только на один день, 'сегодня ', Я предполагаю, что есть больше кода, который вы не показывали. Мы не можем вам помочь, если вы не показываете весь код и четко объясняете, как он вас терпит. – CAB

+0

Вы не сказали, что используете, это похоже на Django ORM, но мы даже не знаем, является ли это вопросом Django или общим Python. – polku

+0

Извините, ребята, да я использую django. позвольте мне загрузить больше из режима, который у меня есть, я постараюсь быть более ясным. – Deluq

ответ

1

Вы можете найти номер дня недели для datetime, вызвав его метод weekday(). После того как вы это значение вы можете проверить его, чтобы увидеть, если его один из дней вы заинтересованы в:

from datetime import datetime, timedelta 

DAYS_OF_INTEREST = {0, 1, 2, 3, 4} # Monday-Friday 
DELTA_ONE_DAY = timedelta(days=1) 
today = datetime.today() 

day = today 
for _ in range(14): # next two weeks 
    if day.weekday() in DAYS_OF_INTEREST: 
     print(day.strftime(("%d/%m/%y --- %A"))) 
     #orders = Report.objects.filter(current_fcd_date=day) 
     #hold = orders.filter(order_hold__contains="HOLD").count() 
    day += DELTA_ONE_DAY 

Выход:

27/09/16 --- Tuesday 
28/09/16 --- Wednesday 
29/09/16 --- Thursday 
30/09/16 --- Friday 
03/10/16 --- Monday 
04/10/16 --- Tuesday 
05/10/16 --- Wednesday 
06/10/16 --- Thursday 
07/10/16 --- Friday 
10/10/16 --- Monday 
+0

Мартин, ты рок! – Deluq

+0

Как насчет применения этой же логики и игнорирования дубликатов при подсчете? – Deluq

+0

У вас будет только дубликат, если диапазон проверок даты превышает 7 дней подряд. – martineau

0

Посмотрите на функцию date.weekday(). Это метод экземпляра классов date и datetime в Python. Она возвращает день недели, как в целом, с понедельником, как 0 и воскресеньем, как 6. Таким образом, вы хотели бы, чтобы пропустить дни с date.weekday() >= 5

Подробнее здесь: https://docs.python.org/2/library/datetime.html

 Смежные вопросы

  • Нет связанных вопросов^_^