Я новичок в 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 игрока сделают свой выбор.
Это простое приложение для исследовательских целей. Таким образом, эффективность не является большой проблемой.