Home > Blogroll, Django > djangofantalega: Asta di riparazione

djangofantalega: Asta di riparazione

11 – Asta di riparazione

Il 31 Gennaio scade il vero mercato di riparazione. Da lì in avanti
si organizza l’asta di riparazione.
Una squadra deve avere la possibilità di vendere un giocatore ed incrementare
il suo budget.

Nella template di ogni singola squadra è presente un pulsante ‘sell players for repair session’
Colleghiamo il pulsante alla view team_details:

...
@login_required
def team_details(request, league_id, team_id):
    ...
    if request.GET.get('sale'):
        return redirect('sale', league.id, team.id)
    return render(request, 'fantalega/team.html', context)

inseriamo la url:

...
    # player sale url
    url(r'^leagues/(?P<league_id>[0-9]+)/teams/'
        r'(?P<team_id>[0-9]+)/player_sale$', views.sale, name='sale'),
]

Aggiungere nel file fantalega\views.py la nuove vista:

...
@login_required
def sale(request, league_id, team_id):
    league = get_object_or_404(League, pk=int(league_id))
    team = get_object_or_404(Team, pk=int(team_id))
    team_players = [(p.code, "%s [%s]" % (p.name, p.role))
                    for p in team.player_set.all()]
    form = TeamSellPlayersForm(request.POST,
                               initial={'team_players': team_players,
                                        'team': team, 'league': league})
    if request.GET.get('back_to_team_details'):
        return redirect('team_details', league.id, team.id)
    if request.method == "POST":
        if form.is_valid():
            players_to_sell = [Player.get_by_code(int(code),
                                                  season=league.season)
                               for code in form.cleaned_data['team_players']]

            gain = 0
            for player in players_to_sell:
                team.player_set.remove(player)
                gain += player.cost
                team.budget += player.cost
                team.save()
            messages.success(request, "Players sold correctly! You gain: %s" %
                             gain)
            return redirect('team_details', league.id, team.id)
    return render(request, 'fantalega/sell.html',
                  {'form': form, 'team_players': team_players, 'team': team,
                   'league': league})

il form che permetterà la vendita di un giocatore sarà:

...
class TeamSellPlayersForm(forms.Form):
    def __init__(self, *args, **kwargs):
        self.dict_values = kwargs.pop('initial')
        super(TeamSellPlayersForm, self).__init__(*args, **kwargs)
        self.fields['team_players'] = forms.MultipleChoiceField(
            choices=self.dict_values['team_players'],
            widget=forms.CheckboxSelectMultiple())

e andrà importato nel file fantalega/views.py:

from .forms import TeamSellPlayersForm
...

Ora la template:

templates/sell.html

{% extends 'fantalega/base.html' %}
{% load bootstrap3 %}

{% block content %}
    <b>Upload lineup for <font color="green">{{ team.name }}</font></b>
    <br><br>
    <form action="#" method="get">
    <input type="submit" class="btn"
           value="back to {{ team.name }} team" name="back_to_team_details">
    </form>

    <form method="POST" class="form">
      {% csrf_token %}
      {% bootstrap_field form.team_players %}
        {% buttons %}
            <button type="submit" class="btn btn-primary">
                {% bootstrap_icon "save" %}Sell players</button>
        {% endbuttons %}
    </form>
{% endblock %}

Per riacquistare un giocatore è possibile utilizzare il form utilizzato
per la prima Asta.

Salvare ora gli avanzamenti su github:

git add --all
git commit -m "Repair Auction added"
git push -u origin master

articoli precedenti
0 – indice
1 – Virtualenv e Git
2 – Models: Season
3 – Admin: Login and Logout
4 – Models: League
5 – Models: Team
6 – Models: Match
7 – Models: Player e Evaluation
8 – Asta
9 – Models: Lineup
10 – Models: Trade

articoli successivi
12 – Classifica

Categorie:Blogroll, Django Tag:
  1. Non c'è ancora nessun commento.
  1. novembre 14, 2016 alle 4:05 pm
  2. novembre 14, 2016 alle 4:06 pm
  3. novembre 14, 2016 alle 4:07 pm
  4. novembre 14, 2016 alle 4:08 pm
  5. novembre 15, 2016 alle 12:37 pm
  6. novembre 15, 2016 alle 12:37 pm
  7. novembre 15, 2016 alle 12:37 pm
  8. novembre 15, 2016 alle 12:38 pm
  9. novembre 15, 2016 alle 12:38 pm
  10. novembre 18, 2016 alle 10:19 pm

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: