Django Calculate期初余额SQL查询

时间:2019-03-11 05:28:31

标签: mysql django

谁能帮助将该视图函数逻辑转换为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列表。当数据库很大时,它会变慢。

1 个答案:

答案 0 :(得分:0)

您只需要如下所示的视图,并将整个trans查询集传递给模板。然后,在模板中,在循环中,您应该能够调用false,这仅仅是对db的一次调用。

trans_item.item_number.opening_balance