Spaces:
Runtime error
Runtime error
from django.db import models | |
from django.contrib.auth.models import User | |
from markdownx.models import MarkdownxField | |
from markdownx.utils import markdown | |
import os | |
class Tag(models.Model): | |
name = models.CharField(max_length=50) | |
slug = models.SlugField(max_length=200, unique=True, allow_unicode=True) | |
def __str__(self): | |
return self.name | |
def get_absolute_url(self): | |
return f'/blog/tag/{self.slug}/' | |
class Category(models.Model): | |
name = models.CharField(max_length=50, unique=True) | |
slug = models.SlugField(max_length=200, unique=True, allow_unicode=True) | |
def __str__(self): | |
return self.name | |
def get_absolute_url(self): | |
return f'/blog/category/{self.slug}/' | |
class Meta: | |
verbose_name_plural = 'categories' | |
class Post(models.Model): | |
title = models.CharField(max_length=30) | |
hook_text = models.CharField(max_length=100, blank=True) | |
content = MarkdownxField() | |
head_image = models.ImageField(upload_to='blog/images/%Y/%m/%d/', blank=True) | |
file_upload = models.FileField(upload_to='blog/files/%Y/%m/%d/', blank=True) | |
created_at = models.DateTimeField(auto_now_add=True) | |
updated_at = models.DateTimeField(auto_now=True) | |
author = models.ForeignKey(User, null=True, on_delete=models.SET_NULL) | |
category = models.ForeignKey(Category, null=True, blank=True, on_delete=models.SET_NULL) | |
tags = models.ManyToManyField(Tag, blank=True) | |
def __str__(self): | |
return f'[{self.pk}]{self.title} :: {self.author}' | |
def get_absolute_url(self): | |
return f'/blog/{self.pk}/' | |
def get_file_name(self): | |
return os.path.basename(self.file_upload.name) | |
def get_file_ext(self): | |
return self.get_file_name().split('.')[-1] | |
def get_content_markdown(self): | |
return markdown(self.content) | |
def get_avatar_url(self): | |
if self.author.socialaccount_set.exists(): | |
return self.author.socialaccount_set.first().get_avatar_url() | |
else: | |
return f'https://api.adorable.io/avatars/60/{self.author.username}.png' | |
class Comment(models.Model): | |
post = models.ForeignKey(Post, on_delete=models.CASCADE) | |
author = models.ForeignKey(User, on_delete=models.CASCADE) | |
content = models.TextField() | |
created_at = models.DateTimeField(auto_now_add=True) | |
modified_at = models.DateTimeField(auto_now=True) | |
def __str__(self): | |
return f'{self.author}::{self.content}' | |
def get_absolute_url(self): | |
return f'{self.post.get_absolute_url()}#comment-{self.pk}' | |
def get_avatar_url(self): | |
if self.author.socialaccount_set.exists(): | |
return self.author.socialaccount_set.first().get_avatar_url() | |
else: | |
return f'https://api.adorable.io/avatars/60/{ self.author.username }.png' |