2016-09-27 6 views
1

Ich muss jeden Samstag und Sonntag automatisch springen, so dass ich ein bestimmtes Element aus einem Modell zählen kann. Dies ist ein Beispiel für die Tabelle I erstellen müssen:Sprung Wochenenden Funktion? 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) 

Dies ist, wie ich filtern, um die Anzahl der hält für heute zu zählen, und ich kann sie halten immer durch Zugabe von 1 Tag:

Dies ist mein Modell (models.py):

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

Dies ist Teil meiner Logik (views.py)

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

Wie Sie sehen können In meiner views.py Logik kann ich alle BAN-Status vom heutigen Datum filtern, danach kann ich sie mit dem aktuellen Problem zählen. Mein Problem ist, dass ich, wenn ich für morgen und morgen filtere, Freitag am Samstag und Sonntag springen muss. Mit anderen Worten, wenden Sie diese Logik jeden Tag an, indem Sie nur die Wochenenden überspringen.

+0

Da der Code nur für einen Tag gezeigt arbeitet, 'heute ', Ich nehme an, es gibt mehr Code, den Sie nicht gezeigt haben. Wir können Ihnen nicht helfen, wenn Sie nicht den ganzen Code zeigen und klar erklären, wie es Ihnen versagt. – CAB

+0

Du hast nicht gesagt, was du benutzt, es sieht aus wie Django ORM, aber wir wissen nicht einmal, ob es eine Django oder eine allgemeine Python Frage ist. – polku

+0

Sorry Leute, ja ich benutze Django. Lass mich mehr von dem Modus hochladen, den ich habe, werde ich versuchen, klarer zu sein. – Deluq

Antwort

1

Sie können den Wochentag-Nummer für eine finden datetime durch Aufruf seiner weekday() Methode. Sobald Sie diesen Wert haben, können Sie es testen, ob es eines der Tage, um zu sehen Sie interessiert sind:

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 

Ausgang:

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

Martin, du rockst! – Deluq

+0

Was ist mit der Anwendung derselben Logik und dem Ignorieren von Duplikaten bei der Zählung? – Deluq

+0

Sie haben nur Duplikate, wenn der Bereich der überprüften Daten über 7 aufeinanderfolgende Tage reicht. – martineau

0

Schauen Sie in die Funktion date.weekday(). Es ist eine Instanzmethode der Klassen date und datetime in Python. Es gibt den Tag der Woche wie in integer, mit Montag als 0 und Sonntag als 6. Sie würden also mehr Tage mit date.weekday() >= 5

Sehen Sie hier überspringen wollen: https://docs.python.org/2/library/datetime.html

Verwandte Themen