| from django.db import models | |
| from django.utils.text import slugify | |
| class Specialite(models.Model): | |
| """Spécialités de l'ENISE (Génie Civil, Mécanique, Physique)""" | |
| nom = models.CharField(max_length=100) | |
| slug = models.SlugField(unique=True, blank=True) | |
| description = models.TextField() | |
| image_url = models.URLField(blank=True, null=True) | |
| icone = models.CharField(max_length=50, blank=True, help_text="Classe FontAwesome, ex: fa-building") | |
| ordre = models.IntegerField(default=0) | |
| class Meta: | |
| ordering = ['ordre', 'nom'] | |
| def save(self, *args, **kwargs): | |
| if not self.slug: | |
| self.slug = slugify(self.nom) | |
| super().save(*args, **kwargs) | |
| def __str__(self): | |
| return self.nom | |
| class Actualite(models.Model): | |
| """Actualités de l'école""" | |
| titre = models.CharField(max_length=200) | |
| slug = models.SlugField(unique=True) | |
| contenu = models.TextField() | |
| image = models.ImageField(upload_to='actualites/', blank=True, null=True) | |
| date_publication = models.DateTimeField(auto_now_add=True) | |
| est_publie = models.BooleanField(default=True) | |
| class Meta: | |
| ordering = ['-date_publication'] | |
| def __str__(self): | |
| return self.titre | |
| class Contact(models.Model): | |
| """Messages du formulaire de contact""" | |
| nom = models.CharField(max_length=100) | |
| email = models.EmailField() | |
| sujet = models.CharField(max_length=200) | |
| message = models.TextField() | |
| date_envoi = models.DateTimeField(auto_now_add=True) | |
| traite = models.BooleanField(default=False) | |
| class Meta: | |
| ordering = ['-date_envoi'] | |
| def __str__(self): | |
| return f"{self.nom} - {self.sujet}" | |
| class Partenaire(models.Model): | |
| """Partenaires académiques et industriels""" | |
| nom = models.CharField(max_length=150) | |
| logo = models.ImageField(upload_to='partenaires/') | |
| url = models.URLField(blank=True) | |
| type_partenaire = models.CharField(max_length=50, choices=[ | |
| ('ACADEMIQUE', 'Académique'), | |
| ('INDUSTRIEL', 'Industriel'), | |
| ('INSTITUTIONNEL', 'Institutionnel'), | |
| ]) | |
| def __str__(self): | |
| return self.nom | |
| class Statistique(models.Model): | |
| """Statistiques affichées sur le site""" | |
| nom = models.CharField(max_length=100) | |
| valeur = models.CharField(max_length=50) | |
| suffixe = models.CharField(max_length=10, default='', blank=True) | |
| icone = models.CharField(max_length=50, help_text="Classe FontAwesome") | |
| ordre = models.IntegerField(default=0) | |
| class Meta: | |
| ordering = ['ordre'] | |
| def __str__(self): | |
| return f"{self.nom}: {self.valeur}" | |