我可以从注释中的sales表中获取Sum(amount_sold)的值

问题描述 投票:0回答:1

我正在尝试显示一个用数据库中的sum值填充的html表。我有sum_amount_purchased和sum_total_price_purchased工作正常,但我正在努力与sum_amount_sold获取此值我需要查询sales表。这是否可以在注释中执行此操作?我想要该用户的每种货币的所有销售额的总和。任何建议将不胜感激。

下表

{% for transaction in transactions %}
    <tr>
        <td>{{transaction.currency}}</td>
        <td>{{transaction.sum_amount_purchased}}</td>
        <td>{{transaction.sum_total_price_purchased }}</td>
        <td>{{transaction.sum_amount_sold}}</td>
    </tr>
{% endfor %}

交易模型如下

class Transaction(models.Model):
    currency = models.CharField(max_length=20)
    amount = models.IntegerField()
    total_price = models.DecimalField(max_digits=8, decimal_places=2)
    date_purchased = models.DateTimeField()
    note = models.TextField(default="")
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    amount_per_coin = models.DecimalField(max_digits=8, decimal_places=2, editable=False)


    def save(self, *args, **kwargs):
        self.amount_per_coin = self.total_price / self.amount
        super(Transaction, self).save(*args, **kwargs)

    def __str__(self):
        return str(self.pk)+','+self.currency + ', '+str(self.amount)

    def get_absolute_url(self):
        return reverse('transaction-detail', kwargs={'pk': self.pk})

下面的销售模型

class Sale(models.Model):
    amount_sold = models.IntegerField()
    total_price_sold = models.DecimalField(max_digits=8, decimal_places=2)
    date_sold = models.DateTimeField(default=timezone.now)
    note = models.TextField(default="")
    transaction = models.ForeignKey(Transaction, on_delete=models.CASCADE, related_name="sales")
    amount_per_coin_sold = models.DecimalField(max_digits=8, decimal_places=2, editable=False)

    def __str__(self):
        return str(self.pk)+','+str(self.amount_sold) + ', '+self.note

    def save(self, *args, **kwargs):
        self.amount_per_coin_sold = self.total_price_sold / self.amount_sold
        super(Sale, self).save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse('sale-detail', kwargs={'pk': self.pk})

查看下面

@login_required
def portfolio(request):

    context = {
        'transactions': Transaction.objects.filter(owner=request.user).values('currency').annotate(
            sum_amount_purchased=Sum('amount'),
            sum_total_price_purchased=Sum('total_price'),
            sum_amount_sold=Sum('sales')
        ),
    }
    return render(request, 'webapp/portfolio.html', context, {'title': 'Portfolio'})
python django annotate
1个回答
0
投票

您需要使用双下划线语法来遍历Sale实际上想要求和的字段 - 大概是amount_sold:

sum_amount_sold=Sum('sales__amoint_sold')
© www.soinside.com 2019 - 2024. All rights reserved.