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

1from typing import ClassVar 1a

2 

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

8 

9 

10class PublishedManager(models.Manager): 1a

11 def get_queryset(self): 1a

12 return super().get_queryset().filter(status=Message.Status.PUBLISHED) 1a

13 

14 

15""" 1a

16class DraftManager(models.Manager): 

17 def get_queryset(self): 

18 return super().get_queryset().filter(status=Message.Status.DRAFT) 

19""" 

20 

21 

22class Message(models.Model): 1a

23 class Status(models.TextChoices): 1a

24 DRAFT = "DF", "Draft" 1a

25 PUBLISHED = "PB", "Published" 1a

26 

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 ) 

47 

48 objects = models.Manager() 1a

49 # draft = DraftManager() 

50 published = PublishedManager() 1a

51 

52 class Meta: 1a

53 ordering: ClassVar[list[str]] = ["-publish"] 1a

54 indexes: ClassVar[list] = [ 1a

55 models.Index(fields=["-publish"]), 

56 ] 

57 

58 def __str__(self): 1a

59 return self.title 1a

60 

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

65 

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 )