diff --git a/core/models.py b/core/models.py new file mode 100644 index 000000000..1d4b399a3 --- /dev/null +++ b/core/models.py @@ -0,0 +1,10 @@ +from django.db import models +from django.db.models.functions import Now + + +class TimestampedModel(models.Model): + cree_le = models.DateTimeField(auto_now_add=True, db_default=Now()) + modifie_le = models.DateTimeField(auto_now=True, db_default=Now()) + + class Meta: + abstract = True diff --git a/data/models.py b/data/models.py index ca445298e..80112310c 100644 --- a/data/models.py +++ b/data/models.py @@ -1,6 +1,7 @@ from django.contrib.gis.db import models from django.db.models.functions import Now +from core.models import TimestampedModel from dags.sources.config.shared_constants import ( SUGGESTION_ATRAITER, SUGGESTION_AVALIDER, @@ -40,7 +41,7 @@ class SuggestionAction(models.TextChoices): SOURCE_SUPPRESSION = SUGGESTION_SOURCE_SUPRESSION, "ingestion de source de données" -class SuggestionCohorte(models.Model): +class SuggestionCohorte(TimestampedModel): id = models.AutoField(primary_key=True) # On utilise identifiant car le champ n'est pas utilisé pour résoudre une relation # en base de données @@ -66,8 +67,6 @@ class SuggestionCohorte(models.Model): blank=True, verbose_name="Metadata de la cohorte, données statistiques", ) - cree_le = models.DateTimeField(auto_now_add=True, db_default=Now()) - modifie_le = models.DateTimeField(auto_now=True, db_default=Now()) @property def is_source_type(self) -> bool: diff --git a/qfdmo/models/acteur.py b/qfdmo/models/acteur.py index f3bd8a3b7..4721dbc30 100644 --- a/qfdmo/models/acteur.py +++ b/qfdmo/models/acteur.py @@ -17,7 +17,6 @@ from django.core.cache import cache from django.core.files.images import get_image_dimensions from django.db.models import Case, Exists, Min, OuterRef, Q, Value, When -from django.db.models.functions import Now from django.forms import ValidationError, model_to_dict from django.http import HttpRequest from django.urls import reverse @@ -25,6 +24,7 @@ from unidecode import unidecode from core.constants import DIGITAL_ACTEUR_CODE +from core.models import TimestampedModel from dags.sources.config.shared_constants import REPRISE_1POUR0, REPRISE_1POUR1 from qfdmo.models.action import Action, get_action_instances from qfdmo.models.categorie_objet import SousCategorieObjet @@ -268,7 +268,7 @@ def get_queryset(self): return DisplayedActeurQuerySet(self.model, using=self._db) -class BaseActeur(NomAsNaturalKeyModel): +class BaseActeur(TimestampedModel, NomAsNaturalKeyModel): class Meta: abstract = True @@ -303,8 +303,6 @@ class Meta: ) naf_principal = models.CharField(max_length=255, blank=True, null=True) commentaires = models.TextField(blank=True, null=True) - cree_le = models.DateTimeField(auto_now_add=True, db_default=Now()) - modifie_le = models.DateTimeField(auto_now=True, db_default=Now()) horaires_osm = models.CharField( blank=True, null=True, validators=[validate_opening_hours] )