第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

單擊 Django 中的按鈕時出現(xiàn)類型錯誤和斷言錯誤

單擊 Django 中的按鈕時出現(xiàn)類型錯誤和斷言錯誤

慕容708150 2023-08-08 10:20:51
對長篇文章表示歉意,我正在嘗試實現(xiàn)一個簡單的按鈕,可以從監(jiān)視列表中添加或刪除項目。雖然我最初設法正確地實現(xiàn)了“addwatchlist”功能,但我修改了代碼幾個小時,但我有點無法再次理解它。這是按“添加到監(jiān)視列表”按鈕時收到的錯誤:TypeError at /addwatchlist/10Field 'id' expected a number but got <Listing: "Gloss + Repair Spray">.Request Method:     GETRequest URL:    http://127.0.0.1:8000/addwatchlist/10Django Version:     3.1.1Exception Type:     TypeErrorException Value:    Field 'id' expected a number but got <Listing: "Gloss + Repair Spray">.追溯 :watchlist.save()▼ Local varsVariable    Valueid          10request     <WSGIRequest: GET '/addwatchlist/10'>watchlist   Error in formatting: TypeError: Field 'id' expected a number but got <Listing: "Gloss + Repair Spray">.這是我在按下“從監(jiān)視列表中刪除”按鈕時收到的錯誤,請注意,這與我最初收到的錯誤完全相同,這反過來又迫使我嘗試調整“添加到監(jiān)視列表”功能的方式:AssertionError at /removewatchlist/1Watchlist object can't be deleted because its id attribute is set to None.Request Method:     GETRequest URL:    http://127.0.0.1:8000/removewatchlist/1Django Version:     3.1.1Exception Type:     AssertionErrorException Value:    Watchlist object can't be deleted because its id attribute is set to None.追溯 :watchlist.delete()▼ Local varsVariable    Valueid          1request     <WSGIRequest: GET '/removewatchlist/1'>watchlist   <Watchlist: 1 Watchlist ID# None : admin watchlisted : "Iphone 11 Pro">Models.py :class Listing(models.Model):    owner = models.CharField(max_length=64)    title = models.CharField(max_length=64)    description = models.TextField(max_length=1024)    startingBid = models.IntegerField()    link = models.URLField(blank=True)    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="category_id")    time = models.DateTimeField(auto_now_add=True)    active = models.BooleanField(null=False, default='True')    def __str__(self):        return f'"{self.title}"'
查看完整描述

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)視”。


查看完整回答
反對 回復 2023-08-08
?
炎炎設計

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ù)。


查看完整回答
反對 回復 2023-08-08
  • 2 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號