Mit datetime zu vergleichen mit Daten in Django
Ich habe eine Frage in Django, wie Sie vergleichen können Termine zu lösen, Lösungen. Zum Beispiel habe ich eine datefield-in meinem models.py Wie im Bild unten gezeigt.
class Invoice(models.Model):
payment_date = models.DateTimeField()
Was ich im Stande sein will zu tun, ist zu Fragen, ob die eine Möglichkeit zum Vergleich einer datetime.jetzt mit ein DateTimeField. Zum Beispiel, wenn ich hatte eine Liste der Zahlungstermine, und ich wollte zu vergleichen mit datetime jetzt. Thhe payment_date die, die zu spät mit Ihren Zahlungen werden angezeigt, aufgrund. Andernfalls ist der Wert null.
Hier meine Ansichten zu zeigen, was Los ist. Ich habe versucht, so weit aber ich bekomme einen 0-Wert für payment_date, die später als das Datum der Zahlung.
Edit hier ist meine neueste Ansichten. Lustig ist, dass ich zu sein scheinen immer die wegen = invoice_gross für alle Ergebnisse - im Gegensatz zu früher, als ich war, alle 0EN. So ist es immer noch nicht richtig funktioniert.
@login_required
def homepage(request):
invoices_list = Invoice.objects.all()
invoice_name = invoices_list[0].client_contract_number.client_number.name
invoice_gross = invoices_list[0].invoice_gross
payment_date = invoices_list[0].payment_date
if payment_date <= datetime.now():
owing = invoice_gross
if payment_date > datetime.now():
owing = 0
return render_to_response(('index.html', locals()), {'invoices_list': invoices_list ,'invoice_name':invoice_name, 'invoice_gross':invoice_gross,'payment_date':payment_date,'owing':owing}, context_instance=RequestContext(request))
Oh, und meine Tabelle ist im Grunde etwas wie das zu tun.
ID Owing
1 100 (All the same value)
2 100
3 100
. .
. .
. .
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das problem ist in der Zeile
Wird buchstäblich sehen, wenn die
payment_date
ist jetzt. Ich denke, Sie wollen, um zu sehen, ob Sie jetzt größer ist als oder gleich derpayment_date
, in dem Fall sollten SieKönnen Sie auch einfach filtern Sie die Rechnungen, wenn Sie die Datenbank Abfragen:
Update
Dein code ist falsch, weil Sie haben sich gegenseitig ausschließende Bedingungen. Aussehen:
Dass zuerst überprüft, um zu sehen, ob
payment_date
ist, bevor jetzt. Dann setzt esowing
zuinvoice_gross
. Dann, in der gleichen bedingten, es prüft, um zu sehen, obpayment_date
ist nach nun. Aber das kann nicht sein! Sie sind nur in diesem block von code, wennpayment_date
ist vor jetzt!Ich denke, Sie haben eine Einbuchtung Fehler, und möchte dieses statt:
Die, natürlich, ist das gleiche wie:
datetime.now
ist eine Funktion, nennen es durchdatetime.now()
owing
auf diesen Wert. Ist es das, was Sie wollen?Verwenden
datetime.now()
(beachten Sie die Klammern). Andere als das, denken Sie daran, dass das Feld immer eindatetime
Objekt. Auch, (ich denke dass) Sie sollten überprüfen, nur die Datum der datetime in übereinstimmung mit dem aktuellen Datum (sonst wird es nur passen, dass die spezifischen zweiten). Für die, die Sie haben zu prüfen, obpayment_date.date() == date.today()
(wodate
istdatetime.date
)Dies bedeutet auch, dass Sie können filter wie diese:
Invoice.objects.filter(payment_date__lte=datetime.now())
.__lte
,__gte
,__lt
,__gt
sind für<=
,>=
,<
und>