Coverage for api\models\epreuve.py: 100%
16 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
« prev ^ index » next coverage.py v7.10.7, created at 2025-10-13 15:18 +0200
1"""
2Module contenant le modèle Epreuve pour la gestion des épreuves sportives.
4Ce module définit la structure de données pour les épreuves sportives,
5qui représentent des compétitions spécifiques au sein d'une discipline.
6"""
8from django.db import models
9from api.models.discipline import Discipline
10from api.models.evenement import Evenement
13class Epreuve(models.Model):
14 """
15 Modèle représentant une épreuve sportive.
17 Une épreuve est une compétition spécifique dans une discipline donnée,
18 caractérisée par son genre (homme/femme/mixte) et son tour (finale, demi-finale, etc.).
19 Chaque épreuve est associée à un événement et doit être unique par combinaison
20 de critères pour éviter les doublons.
22 :ivar libelle: Intitulé de l'épreuve
23 :type libelle: str
24 :ivar genre: Genre de l'épreuve (homme, femme, mixte)
25 :type genre: str
26 :ivar tour: Tour de l'épreuve (finale, demi-finale, qualification, etc.)
27 :type tour: str
28 :ivar discipline: Discipline sportive associée
29 :type discipline: Discipline
30 :ivar evenement: Événement associé à cette épreuve (optionnel)
31 :type evenement: Evenement or None
32 """
33 libelle = models.CharField(max_length=100, help_text="Intitulé de l'épreuve")
34 genre = models.CharField(
35 max_length=100,
36 default="mixte",
37 help_text="Genre de l'épreuve (homme, femme, mixte)"
38 )
39 tour = models.CharField(
40 max_length=100,
41 default="",
42 help_text="Tour de l'épreuve (finale, demi-finale, qualification, etc.)"
43 )
44 discipline = models.ForeignKey(
45 Discipline,
46 on_delete=models.CASCADE,
47 related_name='epreuves',
48 help_text="Discipline sportive associée"
49 )
50 evenement = models.ForeignKey(
51 Evenement,
52 on_delete=models.SET_NULL,
53 related_name='epreuves',
54 null=True,
55 blank=True,
56 help_text="Événement associé à cette épreuve"
57 )
59 class Meta:
60 """
61 Métadonnées du modèle Epreuve.
63 :cvar constraints: Contraintes d'unicité sur libelle, genre, discipline, tour et evenement
64 :type constraints: list
65 :cvar verbose_name: Nom lisible de l'épreuve au singulier
66 :type verbose_name: str
67 :cvar verbose_name_plural: Nom lisible de l'épreuve au pluriel
68 :type verbose_name_plural: str
69 :cvar ordering: Ordre par défaut pour les requêtes
70 :type ordering: list
71 """
72 constraints = [
73 models.UniqueConstraint(
74 fields=['libelle', 'genre', 'discipline', "tour", 'evenement'],
75 name='unique_epreuve_par_discipline_genre_tour_et_evenement'
76 )
77 ]
78 verbose_name = "Épreuve"
79 verbose_name_plural = "Épreuves"
80 ordering = ['discipline__nom', 'genre', 'libelle']
82 def __str__(self):
83 """
84 Représentation textuelle de l'épreuve.
86 :return: Le libellé de l'épreuve
87 :rtype: str
88 """
89 return self.libelle