【发布时间】:2022-01-16 19:22:26
【问题描述】:
**大家好 我想在付款后将购物车项目移动到订购产品表
首先,产品是从卡片物品模型中获取的。产品编号乘以产品价格,我得到订单模型得到订单总额
我的购物车商品未移动到订单产品表我如何移动它们?
我在 /go-to-gatewey/**
收到此错误 ValueErrorValueError 在 /go-to-gatewey/
无法分配“2”:“OrderProduct.product”必须是“Product”实例。
请求方法:GET
请求网址:http://127.0.0.1:8000/go-to-gatewey/
Django 版本:3.2.9
异常类型:ValueError
异常值:
无法分配“2”:“OrderProduct.product”必须是“Product”实例。
异常位置:E:\English Projects_I Do it\Second_Project\GreatKart_Persian\venv\lib\site-packages\django\db\models\fields\related_descriptors.py,第 215 行,在 set
Python 可执行文件: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='تاریخ آپدیت ')
哪一部分错了? 我的购物车项目未移动到订单产品表我该如何移动它们
【问题讨论】:
标签: python django django-models django-views