簡體   English   中英

django post_save 更新信號

[英]django post_save signals on update

我正在嘗試設置一些類似於以下內容的post_save接收器:

@receiver(post_save, sender=Game, dispatch_uid='game_updated')
def game_updated(sender, **kwargs):

    '''DO SOME STUFF HERE'''

    MyPick.objects.filter(week=game.week, team=game.home_team).update(result=home_result)
    MyPick.objects.filter(week=game.week, team=game.away_team).update(result=away_result)


@receiver(post_save, sender=MyPick, dispatch_uid='user_pick_updated')
def update_standings(sender, **kwargs):
    '''DO STUFF'''

在更新 Game 對象后,第一個接收器被正確調用,但是對 MyPick 對象的更新調用不會導致調用第二個接收器。 post_save 信號在更新時不起作用還是我在這里遺漏了其他東西?

update()直接轉換為 SQL 語句 它不會在模型實例上調用save() ,因此不會發出pre_savepost_save信號。 如果您希望調用信號接收器,則應遍歷查詢集,並為每個模型實例進行更改並自己調用save()

@Ismali Badawi 的回答還有一件事。


調用post_save

user = User.objects.get(id=1) 
user.username='edited_username' 
user.save()

不會調用post_save

User.objects.filter(id=1).update(username='edited_username')

在代碼中,

from django.db.models.signals import post_save

@receiver(post_save, sender=User)
def do_something_when_user_updated(sender, instance, created, **kwargs):
    if not created:
        # User object updated
        user_obj = instance
        pass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM