bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


django_lliga

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
django_lliga [2024/06/26 16:06]
enric_mieza_sanchez [Crear model]
django_lliga [2026/03/10 17:08] (actual)
enric_mieza_sanchez [Implementar admin panel]
Línia 127: Línia 127:
 Vigileu, però, la versió de la documentació que consulteu. Vigileu, però, la versió de la documentació que consulteu.
  
 +<WRAP todo>
 Customitza les interfícies del //admin panel// per tal que puguis: Customitza les interfícies del //admin panel// per tal que puguis:
   * Partits:   * Partits:
Línia 138: Línia 139:
       * només mostri els jugadors dels dos equips del partit.       * només mostri els jugadors dels dos equips del partit.
       * només mostri els dos equips del partit.        * només mostri els dos equips del partit. 
 +</WRAP>
  
 {{ django:partit-event-inline.png }} {{ django:partit-event-inline.png }}
Línia 173: Línia 175:
 </file> </file>
  
-Podem millorar el EventInline restringint els jugadors que només ens mostri els dels equips del partit:+Podem millorar el ''EventInline'' restringint els jugadors que només ens mostri els dels equips del partit:
  
 <file python admin.py> <file python admin.py>
Línia 181: Línia 183:
     ordering = ("temps",)     ordering = ("temps",)
     def formfield_for_foreignkey(self, db_field, request, **kwargs):     def formfield_for_foreignkey(self, db_field, request, **kwargs):
-        # filtrem els jugadors i només deixem els que siguin d'algun dels 2 equips (local o visitant) +        if "object_id" not in request.resolver_match.kwargs: 
-        if db_field.name == "jugador":+            # si no hi ha "object_id" no fem res (sol cridar-se en el "add Partit" 
 +            pass 
 +        elif db_field.name == "jugador": 
 +            Filtrem els jugadors i només deixem els que siguin d'algun dels 2 equips (local o visitant)
             partit_id = request.resolver_match.kwargs['object_id']             partit_id = request.resolver_match.kwargs['object_id']
             partit = Partit.objects.get(id=partit_id)             partit = Partit.objects.get(id=partit_id)
-            jugadors_local [fitxa.jugador.id for fitxa in partit.local.fitxa_set.all()] +            # Obtenim dos querysets amb els jugadors locals i visitants 
-            jugadors_visitant [fitxa.jugador.id for fitxa in partit.visitant.fitxa_set.all()] +            jugadors_locals = partit.local.jugadors.all() 
-            jugadors jugadors_local + jugadors_visitant +            jugadors_visitants = partit.visitant.jugadors.all() 
-            kwargs["queryset"] = Jugador.objects.filter(id__in=jugadors) +            # Fusionem els dos querysets amb | (Union en BD) 
-        return super().formfield_for_foreignkey(db_field, request, **kwargs)            +            kwargs["queryset"] = jugadors_locals | jugadors_visitants 
 +        return super().formfield_for_foreignkey(db_field, request, **kwargs)
 </file> </file>
 +
 +<WRAP todo>
 +Modifica el EventIinline perquè també filtri els equips que es mostren en el desplegable. Només ha de mostrar els dos equips que s'enfronten.
 +</WRAP>
  
 <-- <--
Línia 200: Línia 210:
 Els //seeder// són programes que permeten la creació de dades falses per facilitar el test de l'aplicació. Els //seeder// són programes que permeten la creació de dades falses per facilitar el test de l'aplicació.
  
-En particular [[https://faker.readthedocs.io/en/master/|per Python disposem de la llibreria Faker]] que ens facilitarà molt aquesta tasca.+En particular [[https://faker.readthedocs.io/en/master/|per Python disposem de la llibreria Faker]] que ens facilitarà molt aquesta tasca. Instal·leu-la amb: 
 +  (env) $ pip install faker
  
 Podem crear el //seeder// dins una [[https://docs.djangoproject.com/en/stable/howto/custom-management-commands/|comanda personalitzada de Django]] que podrem cridar amb el ''manage.py'' tipus: Podem crear el //seeder// dins una [[https://docs.djangoproject.com/en/stable/howto/custom-management-commands/|comanda personalitzada de Django]] que podrem cridar amb el ''manage.py'' tipus:
Línia 209: Línia 220:
 --> Proposta seeder crea_lliga# --> Proposta seeder crea_lliga#
  
-<file python management/commands/crea_lliga.py>+Creeu les carpetes ''futbol/management/commands'': 
 +  $ mkdir -p futbol/management/commands 
 + 
 +**On <futbol> és la carpeta de l'aplicació dins del projecte Django**. 
 + 
 +Afegiu-hi el següent arxiu: 
 + 
 +<file python lliga/management/commands/crea_lliga.py>
 from django.core.management.base import BaseCommand, CommandError from django.core.management.base import BaseCommand, CommandError
 from django.utils import timezone from django.utils import timezone
Línia 215: Línia 233:
 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(["es_CA","es_ES"]) faker = Faker(["es_CA","es_ES"])
 + 
 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, parser):     def add_arguments(self, parser):
         parser.add_argument('titol_lliga', nargs=1, type=str)         parser.add_argument('titol_lliga', nargs=1, type=str)
 + 
     def handle(self, *args, **options):     def handle(self, *args, **options):
         titol_lliga = options['titol_lliga'][0]         titol_lliga = options['titol_lliga'][0]
-        lliga = Lliga.objects.filter(titol=titol_lliga)+        lliga = Lliga.objects.filter(nom=titol_lliga)
         if lliga.count()>0:         if lliga.count()>0:
             print("Aquesta lliga ja està creada. Posa un altre nom.")             print("Aquesta lliga ja està creada. Posa un altre nom.")
             return             return
 + 
         print("Creem la nova lliga: {}".format(titol_lliga))         print("Creem la nova lliga: {}".format(titol_lliga))
-        lliga = Lliga(  titol=titol_lliga, +        lliga = Lliga( nom=titol_lliga, temporada="temporada" )
-                        inici=timezone.now(), +
-                        final=timezone.now()+timedelta(days=11*30))+
         lliga.save()         lliga.save()
 + 
         print("Creem equips")         print("Creem equips")
         prefixos = ["RCD", "Athletic", "", "Deportivo", "Unión Deportiva"]         prefixos = ["RCD", "Athletic", "", "Deportivo", "Unión Deportiva"]
Línia 247: Línia 263:
                 prefix += " "                 prefix += " "
             nom =  prefix + ciutat             nom =  prefix + ciutat
-            equip = Equip(ciutat=ciutat,nom=nom)+            equip = Equip(ciutat=ciutat,nom=nom,lliga=lliga)
             #print(equip)             #print(equip)
             equip.save()             equip.save()
             lliga.equips.add(equip)             lliga.equips.add(equip)
 + 
             print("Creem jugadors de l'equip "+nom)             print("Creem jugadors de l'equip "+nom)
             for j in range(25):             for j in range(25):
-                nom = faker.first_name() +                nom = faker.name() 
-                cognom1 faker.last_name() +                posicio "jugador" 
-                cognom2 faker.last_name() +                edat 25 
-                jugador = Jugador(nom=nom,cognom1=cognom1,cognom2=cognom2,alias=nom+" "+cognom1)+                jugador = Jugador(nom=nom,posicio=posicio, 
 +                    edat=edat,equip=equip)
                 #print(jugador)                 #print(jugador)
                 jugador.save()                 jugador.save()
-                fitxa = Fitxa(jugador=jugador,equip=equip,inici=timezone.now(),dorsal=i+1) + 
-                fitxa.save() +
         print("Creem partits de la lliga")         print("Creem partits de la lliga")
         for local in lliga.equips.all():         for local in lliga.equips.all():
Línia 352: Línia 367:
 </file> </file>
 <-- <--
 +
 +<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.
 +</WRAP>
  
 \\ \\
Línia 490: Línia 520:
  
 Elabora formularis per: Elabora formularis per:
 +  - Crear jugador (amb ModelForm).
   - Crear lliga.   - Crear lliga.
     * Assegura't que si ja hi ha una lliga amb el mateix nom, no ens deixi guardar.     * Assegura't que si ja hi ha una lliga amb el mateix nom, no ens deixi guardar.
Línia 563: Línia 594:
  
 \\ \\
 +
 +===== Exercicis de consultes =====
 +
 +  - Lligues que contenen la paraula "segona".
 +  - Equips que comença el seu nom amb "Athletic".
 +  - Equips que tenen "North" al nom.
 +  - Equips que acaben el seu nom en "chester".
 +  - Equips que tinguin judadors amb el nom XXX
 +  - Jugadors que hagin marcat algun gol.
 +
  
django_lliga.1719418015.txt.gz · Darrera modificació: 2024/06/26 16:06 per enric_mieza_sanchez