如何修复+=:“DeferredAttribute”和“int”的TypeError不支持的操作数类型

2024-04-24 13:44:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个梦幻般的应用程序,我希望用户的启动11增加他们每次添加一个球员,团队预算减少的数额,球员的价格。在

我正在为python使用django web框架。在

这是我为用户团队设计的模型

class UserTeam(models.Model):
    name = models.CharField(max_length=50)
    user = models.OneToOneField(User, on_delete=models.CASCADE, default=None)
    players = models.ManyToManyField(Player)
    budget = models.IntegerField(default=100000000)
    FORMATION_CHOICES = (
        ('4-3-3', '4-DEF 3-MID 3-ATT'),
        ('4-4-2', '4-DEF 4-MID 2-ATT'),
        ('3-4-3', '3-DEF 4-MID 3-ATT'),
        ('5-3-2', '5-DEF 3-MID 2-ATT'),
    )
    formation = models.CharField(max_length=10, choices = FORMATION_CHOICES)
    starting_xi = models.IntegerField(default=0)
    bench_sub = models.IntegerField(default=0)
    total_score = models.IntegerField(default=0)
    round_score = models.IntegerField(default=0)
    Highest_team_score = models.IntegerField(default=0)


    @classmethod
    def transfer_player_in(cls, user, new_player):
        team, created = cls.objects.get_or_create(
            user=user
        )

        team.players.add(new_player)

    @classmethod
    def transfer_player_out(cls, user, new_player):
        team, created = cls.objects.get_or_create(
            user=user
        )

        team.players.remove(new_player)

我的玩家模型

^{pr2}$

这里有一个视图函数来处理球员的进出

def Transfer_Player(request, operation, pk):
    player= Player.objects.get(pk=pk)  #gets a particular player into the variable player
    if operation =='add':    #if user wants to buy player
        UserTeam.starting_xi += 1
        UserTeam.budget = UserTeam.budget - Player.price
        UserTeam.transfer_player_in(request.user, player)  #add player to team
        UserTeam.save

    elif operation =='sell':
        UserTeam.transfer_player_out(request.user, player)
    else:
        pass
    return redirect('/Fantasy')

我希望每次执行add操作时,用户的起始值都会增加1,并且用户预算会因播放器的价格而降低,但是会得到一个TypeError,不支持的操作数类型+=:'DeferredAttribute'和'int'。在


Tags: 用户defaultnewmodelsdefteamatttransfer
1条回答
网友
1楼 · 发布于 2024-04-24 13:44:11

您需要一个UserTeam的具体实例才能执行您想要的操作。我怀疑你的代码应该是这样的:


if operation =='add':    #if user wants to buy player
    team = UerTeam.objects.get(user_id=request.user.id)
    team.starting_xi += 1
    team.budget -= player.price
    team.save()
    UserTeam.transfer_player_in(request.user, player)  #add player to team

相关问题 更多 >