Louis Mazin 7677667d0b nice
2026-10-13 18:32:32 +02:00

97 lines
3.3 KiB
Python

from django.db import models
class Resource(models.Model):
CATEGORY_CHOICES = [
('svt-seconde', 'SVT — Seconde'),
('svt-premiere', 'SVT — Spécialité Première'),
('svt-terminale', 'SVT — Spécialité Terminale'),
('bph', 'BPH — ST2S'),
('sbm', 'SBM — IFSI'),
('stl-premiere', '3 BIO — Première STL'),
('stl-terminale', '3 BIO — Terminale STL'),
]
KIND_CHOICES = [('pdf', 'Document PDF'), ('video', 'Vidéo'), ('link', 'Lien externe')]
title = models.CharField(max_length=220)
description = models.CharField(max_length=400, blank=True)
category = models.CharField(max_length=32, choices=CATEGORY_CHOICES, db_index=True)
kind = models.CharField(max_length=12, choices=KIND_CHOICES, default='pdf')
url = models.URLField(max_length=1000)
published = models.BooleanField(default=True, db_index=True)
position = models.PositiveIntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ['category', 'position', 'id']
verbose_name = 'Ressource'
verbose_name_plural = 'Ressources'
def __str__(self):
return f'{self.get_category_display()} — {self.title}'
class Testimonial(models.Model):
author = models.CharField(max_length=100)
description = models.CharField(max_length=120, blank=True)
quote = models.TextField(max_length=1500)
published = models.BooleanField(default=True)
position = models.PositiveIntegerField(default=0)
class Meta:
ordering = ['position', '-id']
verbose_name = 'Avis'
verbose_name_plural = 'Avis'
def __str__(self):
return self.author
class ContactMessage(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
phone = models.CharField(max_length=35, blank=True)
level = models.CharField(max_length=100, blank=True)
message = models.TextField(max_length=3000)
accepted_privacy = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
read = models.BooleanField(default=False)
class Meta:
ordering = ['-created_at']
verbose_name = 'Message de contact'
verbose_name_plural = 'Messages de contact'
def __str__(self):
return f'{self.name} — {self.created_at:%d/%m/%Y}'
class Announcement(models.Model):
title = models.CharField(max_length=150)
body = models.TextField(max_length=1200)
cta_label = models.CharField(max_length=70, default='Me contacter')
active = models.BooleanField(default=True)
starts_at = models.DateField(null=True, blank=True)
ends_at = models.DateField(null=True, blank=True)
class Meta:
verbose_name = 'Annonce / offre'
verbose_name_plural = 'Annonces / offres'
def __str__(self):
return self.title
class SiteContent(models.Model):
"""Personnalisation des textes, liens et images du site public."""
key = models.CharField(max_length=100, primary_key=True)
value = models.TextField(max_length=4000, blank=True)
modified_at = models.DateTimeField(auto_now=True)
class Meta:
verbose_name = 'Texte / image du site'
verbose_name_plural = 'Textes et images du site'
def __str__(self):
return self.key