Coverage for api\models\evenement.py: 100%

20 statements  

« prev     ^ index     » next       coverage.py v7.10.7, created at 2025-10-13 15:18 +0200

1""" 

2Module contenant le modèle Evenement pour la gestion des événements sportifs. 

3 

4Ce module définit la structure de données pour les événements qui se déroulent 

5lors des Jeux Olympiques, incluant la gestion automatique des places restantes. 

6""" 

7 

8from django.db import models 

9from api.models.lieu import Lieu 

10 

11 

12class Evenement(models.Model): 

13 """ 

14 Modèle représentant un événement sportif. 

15 

16 Un événement est une session sportive qui se déroule à un lieu et à une heure précise, 

17 avec un nombre de places limité pour les spectateurs. 

18 

19 :ivar description: Description de l'événement 

20 :type description: str 

21 :ivar lieu: Lieu où se déroule l'événement 

22 :type lieu: Lieu 

23 :ivar date: Date de l'événement 

24 :type date: date 

25 :ivar horraire: Heure de début de l'événement 

26 :type horraire: time 

27 :ivar nb_place_total: Nombre total de places disponibles 

28 :type nb_place_total: int 

29 :ivar nb_place_restante: Nombre de places encore disponibles 

30 :type nb_place_restante: int or None 

31 """ 

32 description = models.CharField(max_length=250, help_text="Description de l'événement") 

33 lieu = models.ForeignKey( 

34 Lieu, 

35 on_delete=models.CASCADE, 

36 related_name='evenements', 

37 help_text="Lieu où se déroule l'événement" 

38 ) 

39 date = models.DateField(help_text="Date de l'événement") 

40 horraire = models.TimeField(help_text="Heure de début de l'événement") 

41 nb_place_total = models.IntegerField( 

42 default=1000, 

43 help_text="Nombre total de places disponibles" 

44 ) 

45 nb_place_restante = models.IntegerField( 

46 null=True, 

47 blank=True, 

48 help_text="Nombre de places encore disponibles" 

49 ) 

50 

51 def __str__(self): 

52 """ 

53 Représentation textuelle de l'événement. 

54 

55 :return: La description de l'événement 

56 :rtype: str 

57 """ 

58 return self.description 

59 

60 def save(self, *args, **kwargs): 

61 """ 

62 Sauvegarde l'événement avec initialisation automatique des places restantes. 

63 

64 Lors de la création d'un nouvel événement, si le nombre de places restantes 

65 n'est pas spécifié, il est automatiquement initialisé avec le nombre total de places. 

66 

67 :param args: Arguments positionnels pour la méthode save 

68 :type args: tuple 

69 :param kwargs: Arguments nommés pour la méthode save 

70 :type kwargs: dict 

71 """ 

72 if not self.pk: # création 

73 if self.nb_place_restante is None: 

74 self.nb_place_restante = self.nb_place_total 

75 super().save(*args, **kwargs) 

76 

77 class Meta: 

78 """ 

79 Métadonnées du modèle Evenement. 

80 

81 :cvar verbose_name: Nom lisible de l'événement au singulier 

82 :type verbose_name: str 

83 :cvar verbose_name_plural: Nom lisible de l'événement au pluriel 

84 :type verbose_name_plural: str 

85 :cvar ordering: Ordre par défaut pour les requêtes 

86 :type ordering: list 

87 """ 

88 verbose_name = "Événement" 

89 verbose_name_plural = "Événements" 

90 ordering = ['date', 'horraire']