#1
by
dmartinezfelip
Dear community,
I am trying to implement a point assignment page where players can decide how many points to give to each player (For example, 1 point to Player 2, 10 points to player 4 and so on). However, the points are not being correctly sent/stored. Does anyone have any ideas on how I can solve this? Thanks in advance.
This is the relevant part of the code:
###py
Class Player(BasePlayer):
points_to_assign = models.IntegerField(min=0, initial=0)
points_received = models.IntegerField(initial=0)
did_assign = models.BooleanField(initial=False)
class PointsAssignment(Page):
form_model = 'player'
form_fields = []
@staticmethod
def vars_for_template(player: Player):
choices = [(p.id_in_group, f"Player {p.random_id} (Contribution: {p.contribution_percentage()}%)") for p in player.get_others_in_group()]
return dict(player_choices=choices)
@staticmethod
def before_next_page(player: Player, timeout_happened):
print(f"before_next_page called for player {player.id_in_group}")
for p in player.get_others_in_group():
points_field = f'points_to_assign_{p.id_in_group}'
points_to_assign = int(player.participant.vars.get(points_field, 0))
print(f"Assigning points: player {player.id_in_group} -> player {p.id_in_group}, points_to_assign = {points_to_assign}") # Debugging print
if points_to_assign > 0:
p.points_received += points_to_assign
print(f"Updated player {p.id_in_group}: points_received = {p.points_received}")
player.did_assign = True
print(f"Player {player.id_in_group} did_assign = {player.did_assign}")
###html
{% block title %}
{% trans "Assign Points" %}
{% endblock %}
{% block content %}
<table class="table">
<thead>
<tr class="header1">
<th>{% trans "Group Member" %}</th>
<th>{% trans "How many points to assign" %}</th>
</tr>
</thead>
<tbody>
{% for id, label in player_choices %}
<tr class="header2">
<td>
<label for="{{ id }}">{{ label }}</label>
</td>
<td>
<input type="number" id="{{ id }}" name="points_to_assign" min="0" value="0"> <!-- Input for number of points -->
</td>
</tr>
{% endfor %}
</tbody>
</table>
<button type="submit" class="btn btn-primary">{% trans "Submit Points" %}</button>
after testing and assigning points, the debug displays:
before_next_page called for player 4
Assigning points: player 4 -> player 1, points_to_assign = 0
Assigning points: player 4 -> player 2, points_to_assign = 0
Assigning points: player 4 -> player 3, points_to_assign = 0
Player 4 did_assign = True