from django.db import models
from django.urls import reverse
class Author(models.Model):
slug = models.SlugField(unique=True)
name = models.CharField(max_length=200)
description = models.TextField(blank=True)
avatar = models.CharField(max_length=300, blank=True)
url = models.CharField(max_length=300, blank=True)
featured = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
def __str__(self):
return self.name
class Column(models.Model):
slug = models.SlugField(unique=True)
name = models.CharField(max_length=200)
description = models.TextField(blank=True)
unlisted = models.BooleanField(default=False)
icon = models.CharField(max_length=300, blank=True)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=500)
description = models.TextField(blank=True)
slug = models.SlugField()
date = models.DateField()
author = models.ForeignKey(Author, on_delete=models.PROTECT)
column = models.ForeignKey(Column, on_delete=models.PROTECT)
source = models.URLField(blank=True, null=True)
image = models.URLField(blank=True, null=True)
markdown_path = models.TextField()
content_html = models.TextField(blank=True)
aside_html = models.TextField(blank=True, null=True)
encrypted_content = models.TextField(null=True, blank=True)
encrypted_aside = models.TextField(null=True, blank=True)
disable_comments = models.BooleanField(default=False)
class Meta:
unique_together = ("slug", "date")
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse(
"post_detail",
kwargs={
"year": self.date.year,
"month": f"{self.date.month:02d}",
"day": f"{self.date.day:02d}",
"slug": self.slug,
}
)