首页 > 解决方案 > 在 django 中将数据插入其他模型

问题描述

我有 2 个模型:(发票和摘要)

class Invoice(models.Model):
    inv_id = models.IntegerField()
    order_id = models.IntegerField()
    unit_price = models.IntegerField()
    num_units = models.IntegerField()

    def __str__(self):
        return str(self.inv_id)


class Summary(models.Model):
    invo_id = models.ForeignKey(Invoice, on_delete=models.CASCADE)
    sum = models.IntegerField()

我需要从 url 在汇总表中插入数据,并使用发票表计算“总和”。我试过了:

    inv_id = request.GET.get('inv_id').split(',')

    for i in inv_id:
        # summary = Invoice.objects.filter(id=i).annotate(result=F('unit_price') * F('num_units')).aggregate(Sum('result'))['result__sum']
        summary = Invoice.objects.raw('''select id as id,sum(unit_price * num_units) as sum from restapi_invoice where inv_id = {}'''.format(i))
        x = Invoice.objects.get(pk=summary[0])
        # Summary.objects.update_or_create(invo_id_id=x, defaults={"sum": summary[1]})
        p = Summary(sum=summary[1])
        p.save()
        p.invo_id.add(x)

它不工作。如何从 url 插入 id 并计算该 id 的总和并存储在 Summary 表中?

标签: djangopython-3.xdjango-modelsdjango-rest-frameworkdjango-views

解决方案


您可以通过使用Fin django orm 进入。

inv_id = request.GET.get('inv_id').split(',')
inv_sums = Invoice.objects.filter(id__in=inv_id).annotate(sum=F('unit_price') * F('num_units'))
for inv in inv_sums:
    Summary.objects.create(invo_id=inv, sum=inv.sum)

推荐阅读