Как наиболее эффективно создать лобби django - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь создать лобби, доступное по ссылке game/gameID. У меня есть простое поле в моем db playerNumber = models.IntegerField(default =0). Когда пользователь подключен, я увеличиваю playerNumber на 1. Когда номер игрока равен 2, я просто отображаю страницу с ошибкой. Но когда пользователь закрывает страницу игры по какой-то ошибке, вместо него может присоединиться кто-то другой. Как бы зарезервировать страницу только для 2 пользователей и дать им возможность вернуться, если они уйдут.

1 Ответ

1 голос
/ 05 мая 2020

Вы можете поддерживать отношение ManyToMany следующим образом:

import uuid

class Lobby(...):
    users = models.ManyToManyField(User)
    game_id = models.UUIDField(default=uuid.uuid4, editable=False)

    def is_occupied(self):
        return self.users.count() >= 2

Затем в представлении вы можете проверить, можете ли вы добавить пользователя:

 def add_user_to_lobby(request, game_id):
     lobby = get_object_or_404(Lobby, game_id)
     if lobby.users.filter(pk=request.user.pk).exists():
          return redirect('game_page')
     elif not lobby.is_occupied():
         lobby.users.add(request.user)
         return redirect('game_page')
     else:
         return render(request, "error_page.html")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...