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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Django - pre_delete 信號不更新實(shí)例的外鍵字段

Django - pre_delete 信號不更新實(shí)例的外鍵字段

心有法竹 2024-01-24 16:02:32
pre_delete我正在嘗試為我的 Django 應(yīng)用程序模型使用信號Like。該Like模型有一個(gè)Book外鍵。該Book模型有一個(gè)num_of_likes字段。最終,我試圖num_of_likes從我的信號中更新這個(gè)字段pre_delete。只是我做不到。我的代碼會(huì)讓問題是什么變得非常清楚,我想(請?zhí)貏e注意注釋和打印語句):書籍/模型.py:class Book(models.Model):    num_of_likes = models.IntegerField()喜歡/ models.py:class Like(models.Model):    user = models.ForeignKey(User)    book = models.ForeignKey(Book)喜歡/views.py:class DeleteLikeView(APIView):    def post(self, request, book):        book = get_object_or_404(Book, id=book)        print(book.num_of_likes) # Prints, say, 10        like = Like.objects.get(user=request.user, book=book)        like.delete() # triggers signal handler below (should update `book.num_of_likes`)        print(book.num_of_likes) # Still prints 10, expected 9 <------ PROBLEM        return ...喜歡/信號.py:@receiver(pre_delete, sender=Like)def delete_book_like(sender, instance, **kwargs):    print(instance.book.num_of_likes) # Prints 10    instance.book.num_of_likes -= 1    instance.book.save()    print(instance.book.num_of_likes) # Prints 9, as expected為什么book.num_of_likes內(nèi)部得到更新delete_book_like但更改卻沒有顯示在 中DeleteLikeView?
查看完整描述

1 回答

?
qq_笑_17

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊

book刪除視圖中的 是與信號處理程序中不同的Python對象。instance.bookPython 對象不會(huì)神奇地了解到底層數(shù)據(jù)庫表示已更改。您可以refresh_from_db在打印前調(diào)用:


 book.refresh_from_db()

 print(book.num_of_likes)

或者只是創(chuàng)建num_of_likes一個(gè)動(dòng)態(tài)評估的屬性,您不必?fù)?dān)心非規(guī)范化數(shù)據(jù)的完整性:


class Book(models.Model):

    @property

    def num_of_likes(self):

        return self.like_set.count()


查看完整回答
反對 回復(fù) 2024-01-24
  • 1 回答
  • 0 關(guān)注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

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