Coverage for message/models.py: 100.00%
34 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-13 16:05 -0700
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-13 16:05 -0700
1from django.contrib.auth import get_user_model
2from django.db import models
3from django.template.defaultfilters import slugify
4from django.urls import reverse
5from django.utils import timezone
8class PublishedManager(models.Manager):
9 def get_queryset(self):
10 return super().get_queryset().filter(status=Message.Status.PUBLISHED) 1bfc
13"""
14class DraftManager(models.Manager):
15 def get_queryset(self):
16 return super().get_queryset().filter(status=Message.Status.DRAFT)
17"""
20class Message(models.Model):
21 class Status(models.TextChoices):
22 DRAFT = "DF", "Draft"
23 PUBLISHED = "PB", "Published"
25 title = models.CharField(max_length=250)
26 slug = models.SlugField(
27 max_length=250,
28 null=False,
29 unique_for_date="publish",
30 )
31 author = models.ForeignKey(
32 get_user_model(),
33 on_delete=models.CASCADE,
34 related_name="message_posts",
35 )
36 body = models.TextField()
37 publish = models.DateTimeField(default=timezone.now)
38 created = models.DateTimeField(auto_now_add=True)
39 updated = models.DateTimeField(auto_now=True)
40 status = models.CharField(
41 max_length=2,
42 choices=Status.choices,
43 default=Status.PUBLISHED,
44 )
46 objects = models.Manager()
47 # draft = DraftManager()
48 published = PublishedManager()
50 class Meta:
51 ordering = ["-publish"]
52 indexes = [
53 models.Index(fields=["-publish"]),
54 ]
56 def __str__(self):
57 return self.title 1d
59 def save(self, *args, **kwargs):
60 if not self.slug: 1aedbc
61 self.slug = slugify(self.title) 1b
62 return super().save(*args, **kwargs) 1aedbc
64 def get_absolute_url(self):
65 return reverse( 1e
66 "message_detail",
67 args=[self.publish.year, self.publish.month, self.publish.day, self.slug],
68 )