谁能帮助将该视图函数逻辑转换为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列表。当数据库很大时,它会变慢。
答案 0 :(得分:0)
您只需要如下所示的视图,并将整个trans查询集传递给模板。然后,在模板中,在循环中,您应该能够调用false
,这仅仅是对db的一次调用。
trans_item.item_number.opening_balance