Django

时间:2018-08-19 19:33:43

标签: django django-models hierarchical-data

我想在Django中创建成本层次结构,并在父子层次结构中显示父节点的累积值。我还想显示子节点的值。

为此,我有以下模型:

class accounts(models.Model):
    account_nr = models.IntegerField(null=True)
    account_name = models.CharField(max_length=100)
    parent_account_nr = models.IntegerField(null=True)

典型的帐户列表为:

account_nr    account_name    parent_account_nr
1000          project 1       null
1010          subproject 1    1000
1011          task 1          1010
1012          task 2          1010

我还有另一个模型,其中我将值添加为事务:

class transactions(models.Model):
    transaction_id = models.CharField(max_length=100)
    account_ID = models.ForeignKey(accounts, on_delete=models.CASCADE)
    debit_value = models.DecimalField(max_digits=10, decimal_places=2)
    credit_value = models.DecimalField(max_digits=10, decimal_places=2)

我目前有以下视图,向我显示了交易模型中的累积条目:

def home(request):
    account_query = accounts.objects.all() \
    .annotate(Sum('transactions__debit_value')) \
    .annotate(Sum('transactions__credit_value')) \
    .order_by('account_nr')
    args = {'account_queryx': account_query}
    return render(request, 'home.html', args)

使用以下模板,我可以查看模型中的累积条目。

{% extends "base.html" %}

{% block content %}
  <table>
    <tr>
      <th>Account</th>
      <th>Omschrijving</th> 
      <th>Debit</th>
      <th>Credit</th>
    </tr>
    {% for account_query in account_queryx %}
    <tr>
      <td>{{ account_query.account_nr }}</td>
      <td>{{ account_query.account_name }}</td>
      <td>{{ account_query.transactions__debit_value__sum}}</td>
      <td>{{ account_query.transactions__credit_value__sum }}</td>
     </tr>
    {% endfor %}
    </table>
</div>
{% endblock %}

我无法解决的问题是:如何创建一个查询,以显示成本层次结构中父节点的累积值?

我遇到了以下页面,该页面提供了具有递归CTE的SQL解决方案。https://sqlsunday.com/2014/04/06/accumulating-in-a-hierarchy/  但是据我所知,这在Django中不起作用。

在Django中显示父子层次结构中子节点的累积值的最佳方法是什么?

0 个答案:

没有答案