She*_*009 7 django datetime views models datefield
我在Django中有一个关于如何比较日期以解决一些解决方案的问题.例如,我的models.py中有一个日期字段,如下所示.
class Invoice(models.Model):
payment_date = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)
我想要做的是询问是否可以将datetime.now与DateTimeField进行比较.例如,如果我有一个付款日期列表,我想现在与datetime进行比较.付款延迟的payment_date显示为欠款.否则,它的值为零.
以下是我的观点,以显示最新情况.到目前为止我已经尝试了但是我得到的pay_date值为0,晚于付款日期.
编辑这里是我最新的观点.有趣的是,我似乎得到所有结果的欠款= 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))
Run Code Online (Sandbox Code Playgroud)
哦,我的桌子基本上都是这样做的.
ID Owing
1 100 (All the same value)
2 100
3 100
. .
. .
. .
Run Code Online (Sandbox Code Playgroud)
使用datetime.now()(注意parens).除此之外,请记住该字段始终是一个datetime对象.此外,(我猜)你应该只检查日期时间的日期以匹配当前日期(否则它只会匹配特定的第二天).对于您必须检查payment_date.date() == date.today()(如果date是datetime.date)
这也意味着您可以像这样过滤:Invoice.objects.filter(payment_date__lte=datetime.now()).
__lte,__gte,__lt,__gt被用于<=,>=,<和>
我认为问题就在于此
if datetime.now() == payment_date:
Run Code Online (Sandbox Code Playgroud)
从字面上看,这payment_date是否正确.我想你想看看现在是否大于或等于payment_date,在这种情况下你应该使用
if datetime.now() >= payment_date:
Run Code Online (Sandbox Code Playgroud)
您还可以在查询数据库时过滤发票:
invoices_list = Invoice.objects.filter(payment_date__lte=datetime.now())
Run Code Online (Sandbox Code Playgroud)
您的代码错误,因为您具有互斥条件.看:
if payment_date <= datetime.now():
owing = invoice_gross
if payment_date > datetime.now():
owing = 0
Run Code Online (Sandbox Code Playgroud)
首先检查是否payment_date在此之前.然后它设置owing为invoice_gross.然后,在相同的条件下,它检查是否payment_date在此之后.但那不可能!你只是在这个代码块,如果payment_date是以前,现在!
我认为你有一个缩进错误,并希望这样:
if payment_date <= datetime.now():
owing = invoice_gross
if payment_date > datetime.now():
owing = 0
Run Code Online (Sandbox Code Playgroud)
当然,这与以下内容相同:
if payment_date <= datetime.now():
owing = invoice_gross
else:
owing = 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33475 次 |
| 最近记录: |