主頁 > 移動端開發 > 無法分配“2”:“OrderProduct.product”必須是“Product”實體

無法分配“2”:“OrderProduct.product”必須是“Product”實體

2022-01-17 14:42:54 移動端開發

**大家好,我想在付款后將購物車物品移動到訂購產品表

首先,產品是從卡片專案模型中獲得的。產品編號乘以產品價格,我得到訂單模型得到訂單總額

我的購物車專案未移動到訂單產品表我如何移動它們?

我在 /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熱心網友回復:

如果沒有看到OrderProductCartItems類,您將收到的答案很可能是不完整的。但是,我會盡力幫助您指出正確的方向。

問題是這一行:

    orderProduct.product = item.product_id

看起來您已將您的OrderProduct.product成員設定為與您的Product班級的關系。item.product_id然而,是一個整數。

對此有幾種可能的解決方案:

  • 您可能已經設定了一個OrderProduct.product_id欄位或類似的欄位,它是相關表的整數 ID。如果有,您可以將該欄位設定為整數值item.product_id
    • 我個人會使用這種方法,因為它可以在處理多個請求時防止資料競爭。
  • 如果您CartItem與 建立了類似的關系Product,例如在 下CartItem.product,您可以將其分配OrderProduct.productorderProduct.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

標籤:

上一篇:如何定義字串長度的檢查約束(Django)

下一篇:Django-TypeError__init__()在上傳檔案時缺少1個必需的位置引數

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more