gpt4 book ai didi

python - Django objects.dates ('date' , 'month' ) 查询关闭一个月

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:11 26 4
gpt4 key购买 nike

我正在用 Django 构建一个计费系统,但我遇到了一个奇怪的问题。在我的 views.py 中,我查询以提取付款的唯一月份。然后我遍历这个月份列表以计算出每个月支付了多少。

查询有效,它计算的数字是正确的,但是当我通过模板显示它时,它差了一个月。因此,当我进行查询时,我得到了 6 月的总计,但我最终在模板中将月份显示为 5 月。我知道快速破解来完成这项工作很容易,但我想了解为什么会这样。

代码如下:

# views.py

def reports_index(request):
payment_months = Payment.objects.dates('date', 'month')
payments_by_month = []
for p in payment_months:
monthly_payment = Payment.objects.filter(date__year=p.year, date__month=p.month).aggregate(Sum('amount'))['amount__sum']
yearly_payment = monthly_payment * 12
payments_by_month.append([p, monthly_payment, yearly_payment])

return render_to_response('reports.html', locals(), context_instance=RequestContext(request))


# reports.html

{% load humanize %}

<table cellpadding="0" cellspacing="0" width="100%" class="tableStatic resize">
<thead>
<tr>
<th>Month</th>
<th>Monthly Payments Recieved</th>
<th>Yearly Payment Estimate</th>
</tr>
</thead>
<tbody>
{% for p in payments_by_month %}
<tr class="gradeC">
<td>{{ p.0|date:"M Y" }}</td>
<td style="text-align:center;">${{ p.1|intcomma }}</td>
<td style="text-align:center;">${{ p.2|intcomma }}</td>
</tr>
{% endfor %}

</tbody>
</table>

有没有人以前见过这样的东西?

最佳答案

糟糕!在一些帮助下,我似乎找到了自己问题的答案。

@esauro 建议我检查 {{ p.0.month }} 而不是 {{ p.0|date:"M Y"}},所以这都是他的启发。

{{ p.0.month }} = 6

{{ p.0|date:"M Y"}} = 2012 年 5 月

出现差异的原因是我的 settings.py 使用了时区信息,而我在美国——这让我比格林威治标准时间晚了几个小时,并进入了前一天。因此,2012 年 5 月,当我期待 2012 年 6 月时。默认的 Django 设置是这样的:

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

如果你设置:

USE_TZ = False

然后你就得不到时区感知的日期时间。问一个后续问题,这只发生在 sqlite 上吗?我只是在运行一个开发服务器,我没有意识到这可能会在开发和生产之间发生变化。

这是我直到现在才真正欣赏的东西。数据库有自己的日期和时间结构。 Django ORM 有映射,但这取决于您的 Django 设置。 TZ 设置中的微小变化可能会在很大程度上影响您之前认为是固定不变的事情。

希望这对您有所帮助。

关于python - Django objects.dates ('date' , 'month' ) 查询关闭一个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com