Python 在Django中为同一客户和产品添加每种产品的数量

Python 在Django中为同一客户和产品添加每种产品的数量,python,django,Python,Django,我有3个模型,CustomerPurchaseOrderDetail,Customer和Product model,如果Customer1购买产品,例如肉类。它将保存在CustomerPurchaseOrderDetail中,如果该Customer1添加另一个肉类产品,而不是向数据库添加另一条记录,它只会添加数量 这是我的观点 def batchaddtocart(request): userID = request.POST.get("userID") cl

我有3个模型,CustomerPurchaseOrderDetail,Customer和Product model,如果Customer1购买产品,例如肉类。它将保存在CustomerPurchaseOrderDetail中,如果该Customer1添加另一个肉类产品,而不是向数据库添加另一条记录,它只会添加数量

这是我的观点

def batchaddtocart(request):
    userID = request.POST.get("userID")
    client = Customer(id=userID)
    vegetables_id = request.POST.get("id")

    v = Product(id=vegetables_id)
    price = request.POST.get("price")
    discount = request.POST.get("discount_price")

    insert, create = CustomerPurchaseOrderDetail.objects.get_or_create(
        profile=client,
        products=v,
        unitprice=price,
        quantity=1,
        discounted_amount=discount,
        discounted_unitprice=discount,
    )

    order_qs = CustomerPurchaseOrderDetail.objects.filter\
        (
            profile=client,
            products=v,
            unitprice=price,
            quantity=1,
            discounted_amount=discount,
            discounted_unitprice=discount
        )
    for order in order_qs:
        if order.profile == client and order.products == v:
            insert.quantity += 1
            print(insert.quantity)
            insert.save()
    insert.save()
这是我的模特

class CustomerPurchaseOrderDetail(models.Model):
    profile = models.ForeignKey(Customer, 
                                on_delete=models.SET_NULL, null=True, blank=True,
                                verbose_name="Client Account")
    products = models.ForeignKey(Product, 
                                                on_delete=models.SET_NULL, null=True, blank=True,
                                                verbose_name="Product")
    quantity = models.IntegerField(max_length=500, null=True, blank=True, default=1)

class Product(models.Model):
      product = models.CharField(max_length=500)

class Customer(models.Model):
    user = models.OneToOneField(User, related_name="profile", on_delete=models.CASCADE)
    firstname = models.CharField(max_length=500, blank=True)
    lastname = models.CharField(max_length=500, blank=True)
    contactNumber = models.CharField(max_length=500, blank=True)
    email = models.CharField(max_length=500, blank=True)

我没有遇到错误,但我想要的功能不起作用。即使将相同的产品添加到客户购买的列表中,它也不会增加额外的数量1。

问题出现在以下行中
client=Customer(id=userID)
v=product(id=products\u id)
每次调用函数时,您都在创建新的客户和产品对象,而不是使用现有对象,这就是您的数据库。将它们替换为
client,created=Customer.objects.get\u或\u create(id=userID)
和product
v,v\u created=product.objects.get\u或\u create(id=vegets\u id)
问题出现在以下几行
client=Customer(id=userID)
v=product(id=vegets\id)
每次调用函数时,您都在创建新的客户和产品对象,而不是使用现有对象,这就是您的数据库。将它们替换为
client,created=Customer.objects.get\u或\u create(id=userID)
和product
v,v\u created=product.objects.get\u或\u create(id=vegets\u id)
方法时,只要至少有一个参数与任何注册值不匹配,它就会创建一个新条目。因此,如果您传递的quantity参数等于1,它总是会在quantity为2+时创建一个新条目,例如

您应该首先只使用“固定”参数进行筛选,如果没有得到任何结果,则创建一个新条目。否则,只需增加数量

大概是这样的:


订单=无
order_qs=CustomerPurchaseOrderDetail.objects.filter\
(
profile=客户端,
产品=v,
单价=价格,
折扣金额=折扣,
折扣单价=折扣
)
如果未订购,请订购:
订单=CustomerPurchaseOrderDetail.objects.create(
profile=客户端,
产品=v,
单价=价格,
数量=1,
折扣金额=折扣,
折扣\单价=折扣,
)
其他:
对于订单中的订单:
如果order.profile==client和order.products==v:
#注:请注意,如果您还需要检查其他参数(单价、折扣……)
订单数量+=1
打印(订单数量)
order.save()

当您使用
get\u或\u create
方法时,只要至少有一个参数不同到与任何注册值都不匹配,它就会创建一个新条目。因此,如果您传递的quantity参数等于1,它总是会在quantity为2+时创建一个新条目,例如

您应该首先只使用“固定”参数进行筛选,如果没有得到任何结果,则创建一个新条目。否则,只需增加数量

大概是这样的:


订单=无
order_qs=CustomerPurchaseOrderDetail.objects.filter\
(
profile=客户端,
产品=v,
单价=价格,
折扣金额=折扣,
折扣单价=折扣
)
如果未订购,请订购:
订单=CustomerPurchaseOrderDetail.objects.create(
profile=客户端,
产品=v,
单价=价格,
数量=1,
折扣金额=折扣,
折扣\单价=折扣,
)
其他:
对于订单中的订单:
如果order.profile==client和order.products==v:
#注:请注意,如果您还需要检查其他参数(单价、折扣……)
订单数量+=1
打印(订单数量)
order.save()

到目前为止,您尝试了什么?您遇到了什么错误?这是我更新的代码刚刚将floatfield更改为integerI我现在更改了它,但错误仍然相同您在哪里以及如何访问
数量
属性?到目前为止您尝试了什么?您遇到了什么错误?这是我的更新代码刚刚将floatfield更改为integerI我现在更改了它,但错误仍然相同。您在何处以及如何访问
数量
属性?