django - 在 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 表中?
解决方案
您可以通过使用F
in 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)
推荐阅读
- php - 从 Web 界面启动 PHP 守护程序
- javascript - JSDOC:如何在简单对象中记录函数
- python - 声明“k”对象时,“isinstance”有什么论据?
- wpf - 保持网格中心并最小化/最大化 WPF 网格中的拉伸
- node.js - 使用 babel 将 es6 node.js 部署到 Heroku 时出错
- shopware - 商店用品;以编程方式设置产品封面
- python - 如何在 Python 中使用 odeint 将 ODE 的初始条件置于特定时间点?
- c - 为什么我在 malloc 中遇到错误?我的意思是当高度和宽度相等时我正在工作,但是如果高度大于宽度,它就会卡住
- android-studio - 尝试在 Android Studio、VS Code 和 Web 浏览器中打开 Flutter Inspector “断开连接”
- javascript - Nuxt.js:调度 Vuex 操作不适用于 mapState