Вставьте данные в другую модель в django - PullRequest
0 голосов
/ 04 марта 2020

У меня есть 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, а также вычислить сумму этого идентификатора и сохранить в сводной таблице?

1 Ответ

0 голосов
/ 04 марта 2020

Вы можете войти, используя F в 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)
...