**大家好,我想在付款后將購物車物品移動到訂購產品表
首先,產品是從卡片專案模型中獲得的。產品編號乘以產品價格,我得到訂單模型得到訂單總額
我的購物車專案未移動到訂單產品表我如何移動它們?
我在 /go-to-gatewey/ 處收到此錯誤 ValueError **
在此處輸入影像描述
/go-to-gatewey/ 處的 ValueError 無法分配“2”:“OrderProduct.product”必須是“Product”實體。請求方法:GET 請求 URL: http: //127.0.0.1 :8000/go-to-gatewey/
Django 版本:3.2.9 例外型別:ValueError 例外值:
無法分配“2”:“OrderProduct.product”必須是“產品”實體。例外位置:E:\English Projects_I Do it\Second_Project\GreatKart_Persian\venv\lib\site-packages\django\db\models\fields\related_descriptors.py, line 215, in set
Python Executable: E:\English Projects_I Do it \Second_Project\GreatKart_Persian\venv\Scripts\python.exe
支付功能:
def go_to_gateway_view(request,total=0, quantity=0):
cart_items = CartItem.objects.filter(user=request.user)
for cart_item in cart_items:
total = (cart_item.product.price * cart_item.quantity)
quantity = cart_item.quantity
tax = (2 * total) / 100
grand_total = total tax
form = OrderForm(request.POST)
data = Order()
data.order_total = grand_total
data.tax = tax
# Generate order number
yr = int(datetime.date.today().strftime('%Y'))
dt = int(datetime.date.today().strftime('%d'))
mt = int(datetime.date.today().strftime('%m'))
d = datetime.date(yr, mt, dt)
current_date = d.strftime("%Y%m%d") # Like this : 2021 03 05
order_number = current_date str(data.id)
data.order_number = order_number
data.save()
order = Order.objects.filter(user=request.user, is_ordered=False, order_number=order_number)
# Move the CartItems to Order Product Table
cart_items = CartItem.objects.filter(user=request.user)
for item in cart_items:
orderProduct = OrderProduct()
# orderProduct.order_id = order.id
# orderProduct.payment = payment
orderProduct.user_id = request.user.id
orderProduct.product = item.product_id
orderProduct.quantity = item.quantity
orderProduct.product_price = item.product.price
orderProduct.ordered = True
orderProduct.save()
# Reduce the quantity of the sold products
product = Product.objects.get(id=item.product_id)
product.stock -= item.quantity
product.save()
# Clear Cart
CartItem.objects.get(user=request.user).delete()
# ?????? ???? ?? ?? ???? ?? ?? ??? ???
amount = data.order_total
# ????? ????? ?????? ????? ?? ?? ???? ?? ?? ??? ???
user_mobile_number = '09159150915' # ???????
factory = bankfactories.BankFactory()
bank = factory.create() # or factory.create(bank_models.BankType.BMI) or set identifier
bank.set_request(request)
bank.set_amount(amount)
# ?? ?? ?? ?????? ?? ??? ????? ???? ????? ??????
bank.set_client_callback_url('/callback-gateway/')
bank.set_mobile_number(user_mobile_number) # ???????
# ?? ???? ????? ????? ??? ????? ?? ????? ?????? ?? ?? ???? ?? ???? ??????? ?????? ??? ????? ?? ????? ?? ?? ???
# ?????? ?????? ????.
bank_record = bank.ready()
# ????? ????? ?? ????? ????
return bank.redirect_gateway()
訂購型號:
class Order(models.Model):
STATUS=(
('New','New'),
('Accepted','Accepted'),
('Completed','Completed'),
('Cancelled','Cancelled'),
)
user = models.ForeignKey(Account,on_delete=models.SET_NULL,null=True,verbose_name='??? ????? ????? ')
payment = models.ForeignKey(Payment,on_delete=models.SET_NULL,blank=True,null=True,verbose_name='??? ?????? ')
order_number =models.CharField(max_length=20,verbose_name='????? ? ????? ')
first_name =models.CharField(max_length=50,verbose_name='??? ')
last_name =models.CharField(max_length=50,verbose_name='??? ???????? ')
phone =models.CharField(max_length=15,verbose_name='????? ')
email =models.EmailField(max_length=50,verbose_name='????? ')
address_line_1 =models.CharField(max_length=50,verbose_name='???? ??? ')
address_line_2 =models.CharField(max_length=50,blank=True,verbose_name='???? ??? ')
country =models.CharField(max_length=50,verbose_name='???? ')
state =models.CharField(max_length=50,verbose_name='???? ')
city =models.CharField(max_length=50,verbose_name=' ??? ')
order_note =models.CharField(max_length=100,blank=True,verbose_name='??????? ????? ')
order_total = models.FloatField(verbose_name='??? ?????')
tax = models.FloatField(verbose_name='?????? ')
status =models.CharField(max_length=10, choices=STATUS,default='New',verbose_name='????? ????? ')
ip =models.CharField(blank=True,max_length=20,verbose_name='?? ?? ????? ')
is_ordered= models.BooleanField(default=False,verbose_name='????? ???? ??? ??? ')
created_at =models.DateTimeField(auto_now_add=True,verbose_name='????? ????? ')
updated_at = models.DateTimeField(auto_now=True,verbose_name='????? ????? ')
購物車專案型號:
class CartItem(models.Model):
user =models.ForeignKey(Account,on_delete=models.CASCADE ,null=True)
product =models.ForeignKey(Product,on_delete=models.CASCADE,verbose_name='????? ')
variations =models.ManyToManyField(Variation,blank=True,verbose_name='???? ????? ?? ???? ????')
cart =models.ForeignKey(Cart,on_delete=models.CASCADE,verbose_name='??? ???? ',null=True)
quantity =models.IntegerField(verbose_name='????? ')
is_active =models.BooleanField(default=True,verbose_name='????/??????? ')
并訂購產品型號:
class OrderProduct(models.Model):
order = models.ForeignKey(Order,on_delete=models.CASCADE,verbose_name='????? ')
payment =models.ForeignKey(Payment,on_delete=models.SET_NULL, blank=True, null=True,verbose_name='??? ?????? ')
user =models.ForeignKey(Account,on_delete=models.CASCADE,verbose_name='??? ????? ????? ')
product =models.ForeignKey(Product,on_delete=models.CASCADE,verbose_name='????? ????? ???? ')
variation =models.ForeignKey(Variation,on_delete=models.CASCADE,verbose_name='???? ????? ')
color =models.CharField(max_length=50,verbose_name='??? ????? ')
size =models.CharField(max_length=50,verbose_name='???? ????? ')
quantity =models.IntegerField(verbose_name='????? ????? ')
product_price =models.IntegerField(verbose_name='???? ????? ')
ordered =models.BooleanField(default=False,verbose_name='????? ???? ??? ')
created_at =models.DateTimeField(auto_now_add=True,verbose_name='????? ????? ')
updated_at =models.DateTimeField(auto_now=True,verbose_name='????? ????? ')
哪一部分是錯的?我的購物車專案未移動到訂單產品表我如何移動它們
uj5u.com熱心網友回復:
從錯誤訊息中,問題出在:
orderProduct.product = item.product_id
看起來您的 OrderProduct 模型中有如下內容:
OrderProduct(models.Model):
...
porduct = models.ForeignKey(Product, ....)
這意味著您需要分配一個 Product 實體,而不是 instance->id
您可以將 CartItem 模型更改為
CartItem(models.Model):
...
product = models.ForeignKey(Product, ....)
然后將上面修改為
orderProduct.product = item.product
如果這對您沒有幫助,請發布您的模型 CartItem 和 OrderProduct
uj5u.com熱心網友回復:
如果沒有看到OrderProduct和CartItems類,您將收到的答案很可能是不完整的。但是,我會盡力幫助您指出正確的方向。
問題是這一行:
orderProduct.product = item.product_id
看起來您已將您的OrderProduct.product成員設定為與您的Product班級的關系。item.product_id然而,是一個整數。
對此有幾種可能的解決方案:
- 您可能已經設定了一個
OrderProduct.product_id欄位或類似的欄位,它是相關表的整數 ID。如果有,您可以將該欄位設定為整數值item.product_id。- 我個人會使用這種方法,因為它可以在處理多個請求時防止資料競爭。
- 如果您
CartItem與 建立了類似的關系Product,例如在 下CartItem.product,您可以將其分配OrderProduct.product給orderProduct.product = item.product。- 或者,您可以在
Product表中查詢相關產品,product = Product.objects.get(id=item.product_id)或類似產品。然后,您可以嘗試將該物件分配給orderPRoduct.product = product. - 這種方法的問題是它引入了資料競爭,并且不再增加保證。您可能會
Product在一個請求中查詢 ,然后另一個請求(或應用程式!)可能會Product從資料庫中洗掉 ,然后您嘗試保存orderProduct物件,從而產生錯誤。- 我在上面使用的方法會出現完全相同的錯誤,無論是產品不存在,還是產品在查詢時存在并被洗掉。最好先嘗試插入,然后檢查錯誤,而不是查詢,嘗試插入,然后無論如何都要檢查錯誤。
- 或者,您可以在
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/412654.html
標籤:
