Coverage for website/models/PostModel.py: 88%

24 statements  

« prev     ^ index     » next       coverage.py v7.5.0, created at 2025-09-13 15:29 -0300

1import uuid 

2 

3from django.conf import settings 

4from django.db import models 

5 

6from website.models import * 

7from website.models.AuthorModel import Author 

8 

9# from website.utils.sanitizer import sanitize_html 

10 

11 

12class Post(models.Model): 

13 author = models.ForeignKey(Author, on_delete=models.CASCADE) 

14 title = models.CharField(max_length=200) 

15 url_slug = models.TextField( 

16 max_length=70, blank=False, null=False, unique=True, default=uuid.uuid4 

17 ) 

18 meta_description = models.CharField( 

19 max_length=160, 

20 blank=True, 

21 null=True, 

22 help_text="SEO meta description (max 160 characters)", 

23 ) 

24 text = models.TextField() 

25 published_date = models.DateField(auto_now_add=True) 

26 updated_date = models.DateTimeField(auto_now=True) 

27 # Users who liked this post 

28 likes = models.ManyToManyField( 

29 settings.AUTH_USER_MODEL, blank=True, related_name="liked_posts" 

30 ) 

31 # Users who loved this post 

32 loves = models.ManyToManyField( 

33 settings.AUTH_USER_MODEL, blank=True, related_name="loved_posts" 

34 ) 

35 

36 def publish(self): 

37 self.published_date = timezone.now() 

38 self.save() 

39 

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

41 # Save without sanitizing if sanitizer is unavailable 

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

43 

44 def __str__(self): 

45 return self.title 

46 

47 class Meta: 

48 db_table = "Post"