Coverage for posts/models.py: 100.00%

49 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-05-02 19:56 -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 

6from taggit.managers import TaggableManager 

7 

8 

9class PublishedManager(models.Manager): 

10 def get_queryset(self): 

11 return super().get_queryset().filter(status=Post.Status.PUBLISHED) 1aibcdjekfg

12 

13 

14""" 

15class DraftManager(models.Manager): 

16 def get_queryset(self): 

17 return super().get_queryset().filter(status=Post.Status.DRAFT) 

18""" 

19 

20 

21class Post(models.Model): 

22 class Status(models.TextChoices): 

23 DRAFT = "DF", "Draft" 

24 PUBLISHED = "PB", "Published" 

25 

26 title = models.CharField(max_length=250) 

27 slug = models.SlugField( 

28 max_length=250, 

29 null=False, 

30 unique_for_date="publish", 

31 ) 

32 author = models.ForeignKey( 

33 get_user_model(), 

34 on_delete=models.CASCADE, 

35 related_name="blog_posts", 

36 ) 

37 body = models.TextField() 

38 publish = models.DateTimeField(default=timezone.now) 

39 created = models.DateTimeField(auto_now_add=True) 

40 updated = models.DateTimeField(auto_now=True) 

41 status = models.CharField( 

42 max_length=2, choices=Status.choices, default=Status.PUBLISHED 

43 ) 

44 

45 objects = models.Manager() 

46 # draft = DraftManager() 

47 published = PublishedManager() 

48 tags = TaggableManager() 

49 

50 class Meta: 

51 ordering = ["-publish"] 

52 indexes = [ 

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

54 ] 

55 

56 def __str__(self): 

57 return self.title 1hl

58 

59 def save(self, *args, **kwargs): 

60 if not self.slug: 

61 self.slug = slugify(self.title) 

62 return super().save(*args, **kwargs) 

63 

64 def get_absolute_url(self): 

65 return reverse( 1mbcdefg

66 "post_detail", 

67 args=[self.publish.year, self.publish.month, self.publish.day, self.slug], 

68 ) 

69 

70 

71class Comment(models.Model): 

72 post = models.ForeignKey( 

73 Post, 

74 on_delete=models.CASCADE, 

75 related_name="comments", 

76 ) 

77 name = models.CharField(max_length=80) 

78 email = models.EmailField() 

79 body = models.TextField() 

80 created = models.DateTimeField(auto_now_add=True) 

81 updated = models.DateTimeField(auto_now=True) 

82 active = models.BooleanField(default=True) 

83 

84 class Meta: 

85 ordering = ["created"] 

86 indexes = [ 

87 models.Index(fields=["created"]), 

88 ] 

89 

90 def __str__(self): 

91 return f"Comment by {self.name} on {self.post}" 1h