我有一张记录打印机用纸活动的表格.我需要找出仓库中的纸张数量,为此,我需要将数字与"到货"值相加,然后从数字中减go "给定"的值.怎么做呢?
ID Name Number Status
000001 Stock 50 Arrived
000002 105-1 2 Given
000003 108-3 1 Given
000004 Stock 10 Arrived
000005 104-1 3 Given
它应该是54(+50-2-1+10-3).
我的代码是:
Views.py
class PaperReportView(ListView):
model = PaperReport
template_name = 'Paper_list.html'
ordering = ['-dateaction']
def get_queryset(self):
queryset = super().get_queryset()
queryset = queryset.annotate(
paper_left=Sum(
Case(
When(status='Arrived', then=F('amount')),
When(status='Given', then=-F('amount')),
default=0,
output_field=IntegerField(),
)
)
)
return queryset
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['paper_left_sum'] = self.get_queryset().aggregate(Sum('paper_left'))['paper_left__sum']
return context
Models.py
class PaperReport(models.Model):
name = models.CharField('Office', max_length=255)
amount = models.IntegerField('Number')
status = models.CharField('Status', max_length=255)
def get_absolute_url(self):
return reverse('paper_list')
Paper_list.html
<h2>Printer paper left: {{ paper_left_sum }}<h2>
<div>
{% for case in object_list %}
<div>
<p>{{ case.amount }} pcs {{ case.status}} for {{ case.name }}</p>
</div>
{% endfor %}
</div>