Использование datetime для сравнения с датами в Django
у меня есть вопрос в Django о том, как вы можете сравнивать даты для решения некоторых решений. Например, у меня есть datefield в моем models.py как внизу.
class Invoice(models.Model):
payment_date = models.DateTimeField()
что я хочу иметь возможность сделать, это спросить, является ли способ сравнить datetime.теперь с DateTimeField. Например, если бы у меня был список дат оплаты и я хотел сравнить с datetime сейчас. Thhe payment_date, которые опаздывают с их платежами, показаны в задолженностях. В противном случае это значение равно нулю.
здесь это мои взгляды, чтобы показать, что происходит. Я пробовал до сих пор, но я получаю значение 0 для payment_date, которые позже даты оплаты.
Edit вот мои последние представления. Забавно, что я, похоже, получаю owing = invoice_gross для всех результатов - в отличие от того, когда я получал все 0. Поэтому он все еще не работает должным образом.
@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))
О, и мой стол в основном делает что-то вроде этого.
ID Owing
1 100 (All the same value)
2 100
3 100
. .
. .
. .
2 ответов
Я думаю, что проблема в строке
if datetime.now() == payment_date:
это буквально увидит, если payment_date
is прямо сейчас. Я думаю, вы хотите увидеть, больше ли сейчас или равно payment_date
в этом случае вы должны использовать
if datetime.now() >= payment_date:
вы также можете просто фильтровать счета-фактуры при запросе базы данных:
invoices_list = Invoice.objects.filter(payment_date__lte=datetime.now())
обновление
ваш код неверен, потому что у вас есть взаимоисключающие условия. Смотри:
if payment_date <= datetime.now():
owing = invoice_gross
if payment_date > datetime.now():
owing = 0
это сначала проверяет, если payment_date
это до сих пор. Затем он устанавливает owing
to invoice_gross
. затем, в том же условном, он проверяет, если payment_date
после Теперь. Но этого не может быть! Вы находитесь только в этом блоке кода, если payment_date
is до сейчас!
Я думаю, что у вас есть ошибка отступа, и хотите этого вместо этого:
if payment_date <= datetime.now():
owing = invoice_gross
if payment_date > datetime.now():
owing = 0
что, конечно, то же самое, что:
if payment_date <= datetime.now():
owing = invoice_gross
else:
owing = 0
использовать datetime.now()
(обратите внимание на скобки). Кроме этого, помните, что поле будет всегда быть