Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
django_lliga [2023/06/22 13:15] enric_mieza_sanchez [Exercici lliga de futbol en Django] |
django_lliga [2025/02/20 19:50] (actual) enric_mieza_sanchez [Exercicis] |
||
---|---|---|---|
Línia 41: | Línia 41: | ||
* Partit | * Partit | ||
- | És fàcil tenir la temptació de posar els resultats dins de l' | + | <WRAP todo> |
+ | Creeu els models esmentats: Lliga, Equip, Jugador, Partit. | ||
+ | |||
+ | Podeu mirar el // | ||
+ | </ | ||
+ | |||
+ | És fàcil tenir la temptació de posar els resultats dins de l' | ||
+ | |||
+ | ==== Millorant el model ==== | ||
Els resultats dels partits, si volem que tingui possibilitat de fer rànkings de " | Els resultats dels partits, si volem que tingui possibilitat de fer rànkings de " | ||
Línia 192: | Línia 200: | ||
Els //seeder// són programes que permeten la creació de dades falses per facilitar el test de l' | Els //seeder// són programes que permeten la creació de dades falses per facilitar el test de l' | ||
- | En particular [[https:// | + | En particular [[https:// |
+ | (env) $ pip install faker | ||
- | Podem crear el //seeder// dins una [[https:// | + | Podem crear el //seeder// dins una [[https:// |
- | $ ./admin.py crea_lliga "Lliga fake 2" | + | $ ./manage.py crea_lliga "Lliga fake 2" |
L' | L' | ||
Línia 201: | Línia 210: | ||
--> Proposta seeder crea_lliga# | --> Proposta seeder crea_lliga# | ||
- | <file python management/ | + | Creeu les carpetes '' |
+ | $ mkdir -p lliga/ | ||
+ | |||
+ | Afegiu-hi el següent arxiu: | ||
+ | |||
+ | <file python | ||
from django.core.management.base import BaseCommand, | from django.core.management.base import BaseCommand, | ||
from django.utils import timezone | from django.utils import timezone | ||
Línia 207: | Línia 221: | ||
from datetime import timedelta | from datetime import timedelta | ||
from random import randint | from random import randint | ||
+ | |||
from lliga.models import * | from lliga.models import * | ||
+ | |||
faker = Faker([" | faker = Faker([" | ||
+ | |||
class Command(BaseCommand): | class Command(BaseCommand): | ||
help = 'Crea una lliga amb equips i jugadors' | help = 'Crea una lliga amb equips i jugadors' | ||
+ | |||
def add_arguments(self, | def add_arguments(self, | ||
parser.add_argument(' | parser.add_argument(' | ||
+ | |||
def handle(self, | def handle(self, | ||
titol_lliga = options[' | titol_lliga = options[' | ||
- | lliga = Lliga.objects.filter(titol=titol_lliga) | + | lliga = Lliga.objects.filter(nom=titol_lliga) |
if lliga.count()> | if lliga.count()> | ||
print(" | print(" | ||
return | return | ||
+ | |||
print(" | print(" | ||
- | lliga = Lliga( | + | lliga = Lliga( |
- | inici=timezone.now(), | + | |
- | final=timezone.now()+timedelta(days=11*30)) | + | |
lliga.save() | lliga.save() | ||
+ | |||
print(" | print(" | ||
prefixos = [" | prefixos = [" | ||
Línia 239: | Línia 251: | ||
prefix += " " | prefix += " " | ||
nom = prefix + ciutat | nom = prefix + ciutat | ||
- | equip = Equip(ciutat=ciutat, | + | equip = Equip(ciutat=ciutat, |
# | # | ||
equip.save() | equip.save() | ||
lliga.equips.add(equip) | lliga.equips.add(equip) | ||
+ | |||
print(" | print(" | ||
for j in range(25): | for j in range(25): | ||
- | nom = faker.first_name() | + | nom = faker.name() |
- | | + | |
- | | + | |
- | jugador = Jugador(nom=nom, | + | jugador = Jugador(nom=nom, |
+ | edat=edat,equip=equip) | ||
# | # | ||
jugador.save() | jugador.save() | ||
- | fitxa = Fitxa(jugador=jugador, | + | |
- | fitxa.save() | + | |
print(" | print(" | ||
for local in lliga.equips.all(): | for local in lliga.equips.all(): | ||
Línia 344: | Línia 355: | ||
</ | </ | ||
<-- | <-- | ||
+ | |||
+ | <WRAP todo> | ||
+ | **View classificació** | ||
+ | |||
+ | Crea la view de classificació i afegeix els següents camps: | ||
+ | * Punts | ||
+ | * Victòries | ||
+ | * Empats | ||
+ | * Derrotes | ||
+ | * Gols a favor | ||
+ | * Gols en contra | ||
+ | * Gol average | ||
+ | |||
+ | Afegiu també el nom de la lliga. | ||
+ | </ | ||
\\ | \\ | ||
Línia 436: | Línia 462: | ||
if form.is_valid(): | if form.is_valid(): | ||
lliga = form.cleaned_data.get(" | lliga = form.cleaned_data.get(" | ||
+ | # cridem a / | ||
return redirect(' | return redirect(' | ||
return render(request, | return render(request, | ||
Línia 442: | Línia 469: | ||
</ | </ | ||
- | I la plantilla ens quedaria així de simple: | + | La plantilla |
<file html menu.html> | <file html menu.html> | ||
< | < | ||
Línia 452: | Línia 479: | ||
<input type=" | <input type=" | ||
</ | </ | ||
+ | </ | ||
+ | |||
+ | També necessitarem modificar les URLs per poder accedir adequadament a la classificació i passar-li el ID de la lliga que volem visualitzar: | ||
+ | |||
+ | <file python urls.py> | ||
+ | urlpatterns = [ | ||
+ | path(" | ||
+ | path(" | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | Finalment modifiquem '' | ||
+ | |||
+ | <file python views.py> | ||
+ | def classificacio(request, | ||
+ | lliga = get_object_or_404( Lliga, pk=lliga_id) | ||
+ | equips = lliga.equip_set.all() | ||
+ | #... | ||
</ | </ | ||
Línia 463: | Línia 508: | ||
Elabora formularis per: | Elabora formularis per: | ||
+ | - Crear jugador (amb ModelForm). | ||
- Crear lliga. | - Crear lliga. | ||
* Assegura' | * Assegura' | ||
Línia 536: | Línia 582: | ||
\\ | \\ | ||
+ | |||
+ | ===== Exercicis de consultes ===== | ||
+ | |||
+ | - Lligues que contenen la paraula " | ||
+ | - Equips que comença el seu nom amb " | ||
+ | - Equips que tenen " | ||
+ | - Equips que acaben el seu nom en " | ||
+ | - Equips que tinguin judadors amb el nom XXX | ||
+ | - Jugadors que hagin marcat algun gol. | ||
+ | |||