繁体   English   中英

Django Calculate期初余额SQL查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM