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

1""" 

2Module contenant le modèle Epreuve pour la gestion des épreuves sportives. 

3 

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""" 

7 

8from django.db import models 

9from api.models.discipline import Discipline 

10from api.models.evenement import Evenement 

11 

12 

13class Epreuve(models.Model): 

14 """ 

15 Modèle représentant une épreuve sportive. 

16 

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. 

21 

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 ) 

58 

59 class Meta: 

60 """ 

61 Métadonnées du modèle Epreuve. 

62 

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'] 

81 

82 def __str__(self): 

83 """ 

84 Représentation textuelle de l'épreuve. 

85 

86 :return: Le libellé de l'épreuve 

87 :rtype: str 

88 """ 

89 return self.libelle