2 回答

TA貢獻1788條經驗 獲得超4個贊
根據(jù)您的具體錯誤,問題出在這一行,從錯誤消息中應該可以清楚地看出:
watchlist?=?Watchlist(user=request.user.username,watchlist_listingid_id=Listing.objects.filter(id=id).first())
id 需要一個 int (模型實例的 id),但實際上您正在向它傳遞一個列表模型的對象實例;filter() 返回一個查詢集,然后 .first() 返回該查詢集中的第一個對象。
這就是為什么錯誤告訴您“field id”(需要一個 int),而是得到“<Listing:“Gloss + Repair Spray">”——這是您的 Listing 模型的實際實例。
解決方案:只需在 .first() 之后添加 .id 就可以解決您的問題,因此您實際上將該對象的 id 傳遞給 id 字段:
watchlist?=?Watchlist(user=request.user.username,watchlist_listingid_id=Listing.objects.filter(id=id).first().id)
這應該可以解決您的具體問題;盡管如此,我還是強烈建議您對這些按鈕使用表單。目前,您允許以不安全的方式修改數(shù)據(jù)庫的內容。任何修改數(shù)據(jù)庫內容的活動都應作為 POST 請求進行傳遞。即使您沒有使用任何實際的輸入字段,您也可以很容易地使用表單來完成此操作。該按鈕將提交空表單作為 POST 請求,您可以在模板的表單標記中包含 csrf 令牌,并且數(shù)據(jù)庫將進行相應修改。如果您確實不想使用表單,另一種選擇是使用 AJAX 調用(通過 jQuery),該調用可以作為 POST 請求發(fā)送,而無需使用表單。
最后,如果監(jiān)視列表與用戶綁定,您可能應該考慮完全不同的數(shù)據(jù)庫模式來獲取結果 - 也就是說,實際上將用戶模型與他們添加到監(jiān)視列表中的項目相關聯(lián)(不過,這是可能的,我誤解了你的意圖,也許你不希望這樣)。您可以通過多對多關系連接用戶模型和列表模型,因為用戶可以“監(jiān)視”許多列表,并且列表可以被許多用戶“監(jiān)視”。

TA貢獻1808條經驗 獲得超4個贊
修復:“字段‘id’需要一個數(shù)字,但得到<列表:“光澤+修復噴霧”>?!?/strong>
只需在 .first() 之后添加 .id
watchlist = Watchlist(user=request.user.username,watchlist_listingid_id=Listing.objects.filter(id=id).first() = <Listing: "Gloss + Repair Spray"> watchlist = Watchlist(user=request.user.username,watchlist_listingid_id=Listing.objects.filter(id=id).first().id) = 6 (which is the ID in my database)
修復:無法刪除監(jiān)視列表對象,因為其 id 屬性設置為 None。
watchlist = Watchlist.objects.get(user=request.user.username, watchlist_listingid=id)
在使用 delete() 之前獲取表中的整行并將其分配給變量
而不是有缺陷的:
watchlist = Watchlist(user=request.user.username,watchlist_listingid_id=id)
最后,我發(fā)現(xiàn)要在同一個 HTML 頁面中使用不同的 Django 表單,您可以將表單的操作設置為 URLS.PY 中的路徑 url,然后這將觸發(fā) Views.py 中的特殊函數(shù)。
添加回答
舉報