]> git.p6c8.net - pcdenotes.git/commitdiff
Add publication date to database
authorPatrick Canterino <patrick@patrick-canterino.de>
Sat, 14 May 2022 15:42:08 +0000 (17:42 +0200)
committerPatrick Canterino <patrick@patrick-canterino.de>
Sat, 14 May 2022 15:42:08 +0000 (17:42 +0200)
The publication date is updated if the note is created and set to "published"
or if the publication status is changed to published

notes/migrations/0003_note_published_at.py [new file with mode: 0644]
notes/models.py

diff --git a/notes/migrations/0003_note_published_at.py b/notes/migrations/0003_note_published_at.py
new file mode 100644 (file)
index 0000000..d781d23
--- /dev/null
@@ -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),
+        ),
+    ]
index a3fe24ec5087a5970abbdf26fd7158413d906df5..5541224bbc1f5a39fbd38aca07dd9e2eb434cf81 100644 (file)
@@ -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

patrick-canterino.de