首页 > 解决方案 > Python Django 信号“int”对象没有属性“保存”

问题描述

我在 Django 中创建羽毛球运动应用程序,您可以在其中创建比赛等。我现在要做的是通过信号从我的 models.py 更新matches_played。

这是我的信号.py:

class Player(models.Model):
   ...
   matches_played = models.IntegerField(default=0, blank=True, null=True)
   ...

class Match(models.Model):
    player_home = models.ForeignKey(Player, null=True, on_delete= models.SET_NULL, related_name='player_home')
    player_away = models.ForeignKey(Player, null=True, on_delete= models.SET_NULL, related_name='player_away')
    player_home_sets = models.IntegerField(default=0, blank=True, null=True)
    player_away_sets = models.IntegerField(default=0, blank=True, null=True)

这是我的信号.py:

def add_match_count(sender, instance,**kwargs):
    home_player_sets = instance.player_home_sets
    away_player_sets = instance.player_away_sets
       if home_player_sets > 0 or away_player_sets > 0:
           instance.player_home.matches_played += 1
           instance.player_away.matches_played += 1
           instance.player_home.matches_played.save()

如果我编辑任何匹配项,我会收到错误:“int”对象没有属性“instance”。知道如何解决吗?

标签: pythondjangosignals

解决方案


该行:

instance.player_home.matches_played.save()

没有意义。.matches_played属性是 an ,int并且 anint没有.save()方法。您可能希望将其替换为:

def add_match_count(sender, instance,**kwargs):
    home_player_sets = instance.player_home_sets
    away_player_sets = instance.player_away_sets
       if home_player_sets > 0 or away_player_sets > 0:
           instance.player_home.matches_played += 1
           instance.player_home.save()
           instance.player_away.matches_played += 1
           instance.player_away.save()

推荐阅读