[英]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.