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

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 

6 

7 

8class PublishedManager(models.Manager): 

9 def get_queryset(self): 

10 return super().get_queryset().filter(status=Message.Status.PUBLISHED) 1bfc

11 

12 

13""" 

14class DraftManager(models.Manager): 

15 def get_queryset(self): 

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

17""" 

18 

19 

20class Message(models.Model): 

21 class Status(models.TextChoices): 

22 DRAFT = "DF", "Draft" 

23 PUBLISHED = "PB", "Published" 

24 

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 ) 

45 

46 objects = models.Manager() 

47 # draft = DraftManager() 

48 published = PublishedManager() 

49 

50 class Meta: 

51 ordering = ["-publish"] 

52 indexes = [ 

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

54 ] 

55 

56 def __str__(self): 

57 return self.title 1d

58 

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

63 

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 )