【问题标题】:How can add the data in db field which already exists如何在已经存在的 db 字段中添加数据
【发布时间】:2021-09-17 10:28:57
【问题描述】:

我正在尝试在main_storage 表中添加数据,但是当我保存记录时它显示错误

 failed unsupported operand type(s) for +: 'DeferredAttribute' and 'int'   

Main_StorageproductId是外键我想根据外键添加数据但是显示错误

            try:
            data = self.request.POST.get
            orderView = GatePass(
                fault=data('fault'),
                remarks=data('remarks'),
                order_id=order_Id
            )
            dbItem = Order.objects.get(id=order_Id)
            items = dbItem.orderProduct.quantity
            order_request = OrderRequest.objects.get(pk=orderId)
            faultItem = orderView.fault
            if int(faultItem) >= items:
                return HttpResponse('error')
            else:
                order_request.order.orderProduct.quantity -= int(faultItem)
                Main_Storage.objects.filter(
                    product_id=productId
                ).update(
                    quantity=F('quantity') + order_request.order.orderProduct.quantity
                )
                order_request.order.orderProduct.quantity = int(faultItem)
                order_request.order.orderProduct.save()
                orderView.save()

【问题讨论】:

  • Main_Storage.quantity 没有多大意义,因为那不是 object 而是 Main_Storage 模型。
  • 我知道,但我不知道如何添加数据,因为我已经有大量数据了。
  • 您是否试图将新对象的数量设为表中所有对象的数量加上订单请求的数量之和?
  • @MuhammadUsman:我们确定该产品 ID 已经存在 Main_Storage 吗?
  • 我想在 main_storage,quantity 中求和 order_request.order.orderProduct.quantity 的值而不创建新字段

标签: python django django-models django-rest-framework django-views


【解决方案1】:

您可以使用以下命令更新Main_Storage 对象:

from django.db.models import F

Main_Storage.objects.filter(
    product_id=productId
).update(
    quantity=F('quantity') + order_request.order.orderProduct.quantity
)

如果我们知道这个product_id 已经有一个 Main_Storage 记录,这将起作用。

如果我们不知道,我们可以使用.get_or_create(…) [Django-doc]

from django.db.models import F

qty = order_request.order.orderProduct.quantity

obj, created = Main_Storage.objects.get_or_create(
    product_id=productId,
    defaults={'quantity': qty}
)
if not created:
    obj.quantity = F('quantity') + qty
    obj.save()

【讨论】:

  • 第一种方法现在工作的值是数量上的总和,但总和的值并不准确,就像我给 100 时,总和需要 90。我该如何解决这个问题
  • @MuhammadUsman: 正好是order_request.order.orderProduct.quantity 你确定这是要总结的数量吗?
  • order_request 是表,其中 order 是外键,在 order 表中 orderProduct 是外键,通过该键我得到数量
  • 我更新问题希望你能轻松理解
  • @MuhammadUsman:你能分享一下你的造型吗?我觉得这很令人困惑,尤其是 orderProduct 似乎有数量。
猜你喜欢
  • 2020-04-10
  • 2014-11-21
  • 2014-09-07
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多