Scaffold containerized Django/Wagtail app with core features
This commit is contained in:
25
apps/comments/models.py
Normal file
25
apps/comments/models.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Comment(models.Model):
|
||||
article = models.ForeignKey("blog.ArticlePage", on_delete=models.CASCADE, related_name="comments")
|
||||
parent = models.ForeignKey("self", null=True, blank=True, on_delete=models.CASCADE, related_name="replies")
|
||||
author_name = models.CharField(max_length=100)
|
||||
author_email = models.EmailField()
|
||||
body = models.TextField(max_length=2000)
|
||||
is_approved = models.BooleanField(default=False)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
ip_address = models.GenericIPAddressField(null=True, blank=True)
|
||||
|
||||
def clean(self) -> None:
|
||||
if self.parent and self.parent.parent_id is not None:
|
||||
raise ValidationError("Replies cannot be nested beyond one level.")
|
||||
|
||||
def get_absolute_url(self):
|
||||
return f"{self.article.url}#comment-{self.pk}"
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"Comment by {self.author_name}"
|
||||
Reference in New Issue
Block a user