CaoJay/Blog/passage/models.py

114 lines
4.1 KiB
Python

#!/usr/bin/env Python
# coding=utf-8
from django.db import models
from django.contrib.auth.models import User
from django.utils.functional import cached_property
from django.template.loader import render_to_string
# 文章目录
class Category(models.Model):
name = models.CharField(max_length=32, verbose_name='分类名称')
desc = models.TextField(max_length=200, verbose_name='分类描述', blank=True, default='')
add_date = models.DateTimeField(auto_now_add=True, verbose_name='添加时间')
pub_date = models.DateTimeField(auto_now=True, verbose_name='发布时间')
class Meta:
verbose_name = '博客分类'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
# 标签模型
class Tag(models.Model):
name = models.CharField(max_length=10, verbose_name='文章标签')
add_date = models.DateTimeField(auto_now_add=True, verbose_name='添加时间')
pub_date = models.DateTimeField(auto_now=True, verbose_name='发布时间')
class Meta:
verbose_name = '文章标签'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
# 文章模型
class Post(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='文章作者', null=False)
title = models.CharField(max_length=50, verbose_name='文章标题')
desc = models.TextField(max_length=200, blank=True, default='', verbose_name='文章描述')
content = models.TextField(verbose_name='文章详情')
tags = models.ForeignKey(Tag, on_delete=models.CASCADE, verbose_name='文章标签', null=True)
add_date = models.DateTimeField(auto_now_add=True, verbose_name='添加时间')
pub_date = models.DateTimeField(auto_now=True, verbose_name='发布时间')
is_hot = models.BooleanField(default=False, verbose_name='是热门话题?')
pv = models.IntegerField(default=0, verbose_name='浏览次数')
category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='文章分类')
class Meta:
verbose_name = '文章'
verbose_name_plural = verbose_name
def __str__(self):
return self.title
# 侧边栏模型
class Sidebar(models.Model):
STATUS = (
(1, '隐藏'),
(2, '显示')
)
DISPLAY_TYPE = (
(1, '搜索'),
(2, '最新文章'),
(3, '最热文章'),
(4, '最近评论'),
(5, '归档'),
(6, 'HTML')
)
title = models.CharField(max_length=50, verbose_name='模块名称')
display_type = models.PositiveIntegerField(default=1, choices=DISPLAY_TYPE, verbose_name='展示类型')
content = models.CharField(max_length=500, blank=True, default='', verbose_name='内容',
help_text='除HTML类型外,均可为空...')
sort = models.PositiveIntegerField(default=1, verbose_name='排序', help_text='序列越大越靠前')
status = models.PositiveIntegerField(default=2, choices=STATUS, verbose_name='状态')
add_date = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
class Meta:
verbose_name = '侧边栏'
verbose_name_plural = verbose_name
def __str__(self):
return self.title
@classmethod
def get_sidebar(cla):
return cla.objects.filter(status=2)
@property
def get_content(self):
if self.display_type == 1:
context = {}
return render_to_string('passage/sidebar/search.html', context=context)
elif self.display_type == 2:
context = {}
return render_to_string('passage/sidebar/new_post.html', context=context)
elif self.display_type == 3:
context = {}
return render_to_string('passage/sidebar/hot_post.html', context=context)
elif self.display_type == 4:
context = {}
return render_to_string('passage/sidebar/comment.html', context=context)
elif self.display_type == 5:
context = {}
return render_to_string('passage/sidebar/archives.html', context=context)
elif self.display_type == 6:
return self.content