Python 类型错误:';播放器';对象不可调用Django

Python 类型错误:';播放器';对象不可调用Django,python,django,django-models,typeerror,Python,Django,Django Models,Typeerror,好了,伙计们,我有这样的问题。Django为此类视图返回me类型错误。这是一个游戏的轮转系统: @login_required def game_end_turn(request, id): game = Game.objects.get(id=id) player = Player.objects.get(parent=request.user) if player == game.turn_of_player: game.turn_of_player

好了,伙计们,我有这样的问题。Django为此类视图返回me类型错误。这是一个游戏的轮转系统:

@login_required
def game_end_turn(request, id):
    game = Game.objects.get(id=id)
    player = Player.objects.get(parent=request.user)
    if player == game.turn_of_player:
        game.turn_of_player = game.next_player()
        game.save()
        return redirect('detail', id=game.id)
    else:
        return redirect('detail',id=game.id)
型号:

class Game(models.Model):
    name = models.CharField(max_length=150)
    host = models.CharField(max_length=10)
    is_played = models.BooleanField(default = False)
    max_players = models.IntegerField(default=4)
    who_is_ready = models.ManyToManyField(Player, related_name="guys_ready", blank=True)
    who_is_playing = models.ManyToManyField(Player, related_name="guys_playing", blank=True)
    turn = models.IntegerField(default=1)
    turn_of_player = models.ForeignKey(Player, on_delete=models.CASCADE, related_name='czyja_tura', blank=True, null=True)
。。。它的方法是:

  @property
    def how_many_players_playing(self):
        return self.who_is_playing.count()



     @property
        def players_playing(self):
            return list(self.who_is_playing.all())

 @property
    def next_player(self):
        x = self.players_playing.index(self.turn_of_player)
        nast= x+1
        if nast > self.how_many_players_playing:
            self.turn +=1
            self.save()
            return self.players_playing[0]
        else:
            return self.players_playing[x+1]
它以这样的错误结束:

TypeError:“播放器”对象不可调用:

Traceback (most recent call last):
  File "/Users/dottore/PycharmProjects/CRUDE/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/Users/dottore/PycharmProjects/CRUDE/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/dottore/PycharmProjects/CRUDE/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/dottore/PycharmProjects/CRUDE/venv/lib/python3.8/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/Users/dottore/PycharmProjects/Nowa_gra/Nova_gra/game/views.py", line 139, in game_end_turn
    game.turn_of_player = game.next_player()

Exception Type: TypeError at /game/2=end_turn
Exception Value: 'Player' object is not callable

为什么我不能指派那个球员?请帮帮我。谢谢

因为
下一个玩家
是一个
@属性
,你可以通过
游戏获得值。下一个玩家
,如果你使用括号,你可以调用
玩家
对象,但是该对象是不可调用的(除非你实现了
下一个玩家
方法,但是你没有,而且可能最好不要这样做)

因此,您应该将该行改写为:

    game.turn_of_player = game.next_player  # no ()

game.turn\u of\u player=game.next\u player#no()
由于
next\u player
是一个
@属性
,可以通过
game获得值。next\u player
,如果使用括号,可以调用
player
对象,但该对象不可调用(除非您实现了一个
\uuuuuu调用
方法,但您没有实现,而且可能最好不要这样做)

因此,您应该将该行改写为:

    game.turn_of_player = game.next_player  # no ()

game.turn\u of\u player=game.next\u player#no()
请将完整错误回溯添加到您的问题中。请将完整错误回溯添加到您的问题中。