97 lines
3.3 KiB
Python
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
|