From: Patrick Canterino Date: Sat, 14 May 2022 15:42:08 +0000 (+0200) Subject: Add publication date to database X-Git-Url: https://git.p6c8.net/pcdenotes.git/commitdiff_plain/bb41f36c58707df91ca96b39b41f51e98306aee7 Add publication date to database The publication date is updated if the note is created and set to "published" or if the publication status is changed to published --- diff --git a/notes/migrations/0003_note_published_at.py b/notes/migrations/0003_note_published_at.py new file mode 100644 index 0000000..d781d23 --- /dev/null +++ b/notes/migrations/0003_note_published_at.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.4 on 2022-05-14 15:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('notes', '0002_alter_note_title'), + ] + + operations = [ + migrations.AddField( + model_name='note', + name='published_at', + field=models.DateTimeField(null=True), + ), + ] diff --git a/notes/models.py b/notes/models.py index a3fe24e..5541224 100644 --- a/notes/models.py +++ b/notes/models.py @@ -1,9 +1,14 @@ from django.db import models from django.db.models import Count from django.db.models.functions import ExtractYear, ExtractMonth +from django.db.models.signals import pre_save + +from django.dispatch import receiver from django.contrib.auth.models import User from django.urls import reverse +from datetime import datetime + # Create your models here. NOTE_STATUS = ((0, "Draft"), @@ -40,6 +45,7 @@ class Note(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) + published_at = models.DateTimeField(null=True, editable=False) objects = NoteManager() @@ -56,4 +62,15 @@ class Note(models.Model): return self.status == 0 def is_published(self): - return self.status == 1 \ No newline at end of file + return self.status == 1 + +@receiver(pre_save, sender=Note) +def note_pre_save(sender, instance, **kwargs): + if instance.pk is None: + if instance.status == 1: + instance.published_at = datetime.now() + else: + old_instance = Note.objects.get(pk=instance.pk) + + if old_instance.status == 0 and instance.status == 1: + instance.published_at = datetime.now() \ No newline at end of file