【发布时间】:2014-01-31 16:27:24
【问题描述】:
我有一组按日期和每个日期内的序列号排序的导入银行帐户条目。
我正在使用 django-tables2 来显示数据,我在其中添加了一个在呈现视图之前计算的运行总计列。
为此,我尝试使用以下代码向查询集中添加一个字段:
import django_tables2 as tables
from django_tables2 import RequestConfig
from .models import Bank, BankImportFile, ImportFileEntry
... other imports
class BankListingTable(tables.Table):
memo = tables.Column(verbose_name = 'Description')
total = tables.Column(verbose_name = 'Running Total')
class Meta:
model = ImportFileEntry
attrs = {'class': 'paleblue'}
def bank_listing(request, bankname):
bank = get_object_or_404(Bank, pk=bankname)
qs = ImportFileEntry.objects.filter(account=Bank(bank)).order_by('date', 'seq')
total = 0
for row in qs:
total += row.amount
row.total = total
table = BankListingTable(qs)
RequestConfig(request).configure(table)
return render(request, 'banking/bank_transactions.html', {'table': table, 'bank': bank})
如果我在pdb 中单步执行此代码,我可以同时检查row.total 和qs[<row number>].total,它们似乎有正确的数据。
然而在呈现的表格中,我在总列中得到的只是--
如果我将我的 queryset 转换为列表并保持其他所有内容不变,它会起作用:
def bank_listing(request, bankname):
bank = get_object_or_404(Bank, pk=bankname)
qs = ImportFileEntry.objects.filter(account=Bank(bank)).order_by('date', 'seq')
qs = list(qs) # ADDED THIS LINE AND IT WORKS
total = 0
for row in qs:
total += row.amount
row.total = total
table = BankListingTable(qs)
RequestConfig(request).configure(table)
return render(request, 'banking/bank_transactions.html', {'table': table, 'bank': bank})
我的queryset 很大,因为它是一个有 9 年历史的商业银行帐户,因此将其复制到 list 似乎效率很低。
我在StackOverflow 上看到了其他示例,这些示例似乎暗示我的原始代码应该可以工作,而 pdb 测试暗示它应该可以。这是django-tables2 里的东西吗?
【问题讨论】:
-
您好!我尝试做你所做的(没有转换为
list),它工作正常。可能你错过了什么......
标签: python django django-queryset django-tables2