Триггер Django для более чем 1 пользователя - PullRequest
0 голосов
/ 02 июня 2019

Я новичок в Django (и HTML) и работаю над простым приложением, в котором несколько пользователей могут войти в систему и выбрать между головой или хвостом для одной и той же монеты, например.

Для упрощения предположим, что база данных уже создана с серией ответов заранее. Например. у нас есть серии: «голова», «голова», «хвост», «голова», ... уже сгенерированы случайным образом и каким-то образом хранятся. (Так что сейчас я не беспокоюсь о справедливости.) И есть 3 пользователя, созданных как player1 ~ player3.

Когда все игроки вошли в систему, они переходят на страницу Match.html, чтобы выбрать между головой и хвостом.

На данный момент мне нужен один триггер для всех 3 игроков. то есть после всех 3 игроков Сделав свой выбор, они будут переведены на ту же страницу для другого раунда (или страницы результатов).

В моем коде выбор определяется как:

class Choice(models.Model):
    pub_date = models.DateTimeField(auto_now=True)
    decision = models.CharField(max_length=10)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

Вид определяется как:

@login_required
def thinkandchoose(request):
    choice = Choice()
    if(request.POST.get('choiceh')):
        choice.decision = 'head'
        print("head button pressed.")
    if(request.POST.get('choicet')):
        choice.decision = 'tail'
        print("tail button pressed.")
    choice.author = request.user
    choice.save()
    userList = get_all_logged_in_users(request)
    return render(request, 'versus/matching.html', context={'players': userList})


#I found this method on stackoverflow to figure out whether other users are logged in.
@login_required
def get_all_logged_in_users(request):
    # Query all non-expired sessions
    # use timezone.now() instead of datetime.now() in latest versions of Django
    sessions = Session.objects.filter(expire_date__gte=timezone.now())
    uid_list = []

    # Build a list of user ids from that query
    for session in sessions:
        data = session.get_decoded()
        uid_list.append(data.get('_auth_user_id', None))

    # Query all logged in users based on id list
    return User.objects.filter(id__in=uid_list)

Шаблон:

{% for player in players %}
    <div>
        {{ player.username }}
    </div>
{% endfor %}
<br><br>
<form method="post">
    {% csrf_token %}
    {% load static %}
    <button name="choiceh" value="Click">
        <img src="{% static "head.png" %}" width="100" height="100">
    </button>
    <button name="choicet" value="Click">
        <img src="{% static "tail.png" %}" width="100" height="100">
    </button>
</form>

Вопрос: Как реализовать триггер: перейдите на соответствующую страницу (или страницу результатов) после того, как все 3 игрока сделают свой выбор.

Это простое приложение для исследовательских целей. Таким образом, эффективность не является большой проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...