Coverage for message/models.py: 100.00%
35 statements
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-30 10:08 -0700
« prev ^ index » next coverage.py v7.17.0, created at 2026-10-30 10:08 -0700
1from typing import ClassVar 1a
3from django.contrib.auth import get_user_model 1a
4from django.db import models 1a
5from django.template.defaultfilters import slugify 1a
6from django.urls import reverse 1a
7from django.utils import timezone 1a
10class PublishedManager(models.Manager): 1a
11 def get_queryset(self): 1a
12 return super().get_queryset().filter(status=Message.Status.PUBLISHED) 1a
15""" 1a
16class DraftManager(models.Manager):
17 def get_queryset(self):
18 return super().get_queryset().filter(status=Message.Status.DRAFT)
19"""
22class Message(models.Model): 1a
23 class Status(models.TextChoices): 1a
24 DRAFT = "DF", "Draft" 1a
25 PUBLISHED = "PB", "Published" 1a
27 title = models.CharField(max_length=250) 1a
28 slug = models.SlugField( 1a
29 max_length=250,
30 null=False,
31 unique_for_date="publish",
32 )
33 author = models.ForeignKey( 1a
34 get_user_model(),
35 on_delete=models.CASCADE,
36 related_name="message_posts",
37 )
38 body = models.TextField() 1a
39 publish = models.DateTimeField(default=timezone.now) 1a
40 created = models.DateTimeField(auto_now_add=True) 1a
41 updated = models.DateTimeField(auto_now=True) 1a
42 status = models.CharField( 1a
43 max_length=2,
44 choices=Status.choices,
45 default=Status.PUBLISHED,
46 )
48 objects = models.Manager() 1a
49 # draft = DraftManager()
50 published = PublishedManager() 1a
52 class Meta: 1a
53 ordering: ClassVar[list[str]] = ["-publish"] 1a
54 indexes: ClassVar[list] = [ 1a
55 models.Index(fields=["-publish"]),
56 ]
58 def __str__(self): 1a
59 return self.title 1a
61 def save(self, *args, **kwargs): 1a
62 if not self.slug: 1a
63 self.slug = slugify(self.title) 1a
64 return super().save(*args, **kwargs) 1a
66 def get_absolute_url(self): 1a
67 return reverse( 1a
68 "message_detail",
69 args=[self.publish.year, self.publish.month, self.publish.day, self.slug],
70 )