Python 类型错误:';播放器';对象不可调用Django
好了,伙计们,我有这样的问题。Django为此类视图返回me类型错误。这是一个游戏的轮转系统: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
@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()
请将完整错误回溯添加到您的问题中。请将完整错误回溯添加到您的问题中。