【发布时间】:2020-09-01 14:54:31
【问题描述】:
好吧,伙计们,我有这样的问题。 Django 为此类视图返回类型错误。它旨在成为游戏的回合系统:
@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: 'Player' 对象不可调用:
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
为什么我不能分配那个播放器?请帮我。谢谢
【问题讨论】:
-
请将完整的错误回溯添加到您的问题中。
标签: python django django-models typeerror