簡體   English   中英

Django“元組”對象沒有“保存”屬性

[英]Django 'tuple' object has no attribute 'save'

我有這個模型CustomerPurchaseOrderDetail,Product,Customer,我只是希望如果CustomerPurchaseOrderDetail模型中存在相同的productID和相同的CustomerID,如果CustomerPurchaseOrderDetail中存在相同的productID和相同的CustomerID,數量將加1。

userID = request.POST.get("userID")
client = Customer(id=userID)
vegetables_id = request.POST.get("id")
quantity = request.POST.get("quantity")
v = Product(id=vegetables_id)
price = request.POST.get("price")
discount = request.POST.get("discount_price")
insert = CustomerPurchaseOrderDetail.objects.get_or_create(
    profile=client,
    product = v,
    quantity=quantity,
    unitprice=price,
    discounted_amount = discount,
    discounted_unitprice = discount,
)
insert.save()

這是我的模特

class CustomerPurchaseOrderDetail(models.Model):
    profile = models.ForeignKey(Customer, 
                                on_delete=models.SET_NULL, null=True, blank=True,
                                verbose_name="Client Account")
    product = models.ForeignKey(Product, 
                                                on_delete=models.SET_NULL, null=True, blank=True,
                                                verbose_name="Product")
    quantity = models.FloatField(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)

這是我的錯誤

在此處輸入圖片說明

這是我的完整追溯

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/batchaddtocart/

Django Version: 2.2.4
Python Version: 3.7.4
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'customAdmin',
 'sweetify']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\exception.py" in inner
  34.             response = get_response(request)

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  115.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\User\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  113.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\User\Desktop\LastProject\OnlinePalengke\customAdmin\views.py" in batchaddtocart
  939.     insert.save()

Exception Type: AttributeError at /batchaddtocart/
Exception Value: 'tuple' object has no attribute 'save'

.get_or_create(…) [Django-doc]返回一個二元組:作為第一個元素是您檢索或創建的項目,第二個是指示它是否已創建的布爾值。 您可以使用可迭代解包來解包對象:

insert, __ = CustomerPurchaseOrderDetail.objects.get_or_create(
    profile=client,
    product = v,
    quantity=quantity,
    unitprice=price,
    discounted_amount = discount,
    discounted_unitprice = discount,
)

然而,調用.save()沒有多大意義,因為.get_or_create(…)已經將對象保存到數據庫中。

編輯:您可以通過以下方式增加數量:

insert, created = CustomerPurchaseOrderDetail.objects.get_or_create(
    profile=client,
    product = v,
    unitprice=price,
    discounted_amount = discount,
    discounted_unitprice = discount,
    defaults=dict(quantity=quantity)
)

if not created:
    insert.quantity += quantity
    insert.save()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM