[英]Django Calculate Opening Balance sql query
谁能帮忙将此视图函数逻辑转换为Django mysql查询。 这样我可以获得我想要的结果,但是随着数据库的庞大,它变得越来越慢。
这里需要计算期初和期末余额。
楷模:
class Item(models.Model):
item = models.CharField(max-length=50)
opening_balance = models.PositiveIntegerField()
class Transaction(models.Model):
item_name = models.ForeignKey(Item, on_delete=models.CASCADE)
purchases = models.PositiveIntegerField()
sales = models.PositiveIntegerField()
视图
def display_balances(request):
balances = []
items = Item.objects.all()
for i in items:
opening = i.opening_balance
bal = Transaction.objects.filter(item_name=i)
for item in bal:
dict = {}
opening_balance = opening
closing_balance = opening_balance + item.purchases - item.sales
opening = closing_balance
dict['item']=item.item_name
dict['opening']=opening_balance
dict['purchases']=item.purchases
dict['sales']=item.sales
dict['closing']=closing_balance
balances.append(dict)
return render(request, '123/details.html', {'balances':balances})
模板
{% for b in balances %}
<td>{{b.item}}</td>
<td>{{b.opening}}</td>
<td>{{b.purchases}}</td>
<td>{{b.sales}}</td>
<td>{{b.closing}}</td>
{% endforfor %}
输出:
item opening purchases sales closing
abc 10 20 10 20
abc 20 10 15 15
abc 15 0 10 5
def 15 15 10 20
abc 5 10 5 10
def 20 0 5 15
等等...
我需要有人来帮助我将View Logic转换为sql查询,而不是像我正在使用的那样使用Dictioneries列表。 当数据库很大时,它变慢。
您只需要一个类似下面的视图,并将整个trans查询集传递给模板。 然后,在模板中,在循环中,您应该能够调用trans_item.item_number.opening_balance
这只是对db的一次调用。
def display_balances(request):
trans = Transaction.objects.all().select_related('item_number')
return render(request, '123/details.html', {'balances': trans})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.