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
« prev ^ index » next coverage.py v7.5.0, created at 2025-09-13 15:29 -0300
1import uuid
3from django.conf import settings
4from django.db import models
6from website.models import *
7from website.models.AuthorModel import Author
9# from website.utils.sanitizer import sanitize_html
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 )
36 def publish(self):
37 self.published_date = timezone.now()
38 self.save()
40 def save(self, *args, **kwargs):
41 # Save without sanitizing if sanitizer is unavailable
42 return super().save(*args, **kwargs)
44 def __str__(self):
45 return self.title
47 class Meta:
48 db_table = "Post"