settings.py
AUTH_USER_MODEL = 'blog.UserInfo'
models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
"""
用户信息表
"""
nickname = models.CharField(max_length=32, verbose_name='昵称')
avatar = models.FileField(upload_to='avatars/', default="avatars/default.png", verbose_name='头像')
c_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
u_time = models.DateTimeField(auto_now=True, verbose_name='修改时间')
blog = models.OneToOneField(to='Blog', to_field='id', null=True, verbose_name='关联博客信息')
def __str__(self):
return self.username
class Blog(models.Model):
"""
博客信息表
"""
b_name = models.CharField(max_length=64, verbose_name='博客名称')
site = models.CharField(max_length=32, unique=True, verbose_name='博客地址')
theme = models.CharField(max_length=32, verbose_name='博客主题')
def __str__(self):
return self.b_name
class Category(models.Model):
"""
文章分类表
"""
c_name = models.CharField(max_length=32, verbose_name='文章分类名称')
blog = models.ForeignKey(to='Blog', to_field='id', null=True, verbose_name='关联博客')
def __str__(self):
return self.c_name
class Tag(models.Model):
"""
文章标签表
"""
t_name = models.CharField(max_length=32, verbose_name='文章标签名称')
blog = models.ForeignKey(to='Blog', to_field='id', null=True, verbose_name='关联博客')
def __str__(self):
return self.t_name
class Article(models.Model):
"""
文章信息表
"""
title = models.CharField(max_length=64, verbose_name='文章标题')
description = models.CharField(max_length=255, verbose_name='文章描述')
comment_count = models.IntegerField(default=0, verbose_name='评论数')
up_count = models.IntegerField(default=0, verbose_name='点赞数')
down_count = models.IntegerField(default=0, verbose_name='踩灭数')
c_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
u_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
user = models.ForeignKey(to='UserInfo', to_field='id', verbose_name='关联作者')
article_detail = models.OneToOneField(to='ArticleDetail', to_field='id', verbose_name='关联文章内容详情')
category = models.ForeignKey(to='Category', to_field='id', null=True, verbose_name='关联文章分类')
tag = models.ManyToManyField(
to='Tag',
through='Article2Tag',
through_fields=('article', 'tag'),
verbose_name='关联文章标签'
)
def __str__(self):
return self.title
class ArticleDetail(models.Model):
"""
文章内容详情表
"""
remarks = models.CharField(max_length=64, verbose_name='文章内容详情备注')
content = models.TextField(verbose_name='文章内容详情')
def __str__(self):
return self.remarks
class Article2Tag(models.Model):
"""
文章与标签关联表
"""
article = models.ForeignKey(to="Article", to_field='id', verbose_name='文章')
tag = models.ForeignKey(to="Tag", to_field='id', verbose_name='标签')
class Meta:
unique_together = ('article', 'tag')
class Comment(models.Model):
"""
文章评论表
"""
user = models.ForeignKey(to='UserInfo', to_field='id', verbose_name='评论用户')
content = models.CharField(max_length=255, verbose_name='评论内容')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='评论时间')
article = models.ForeignKey(to='Article', to_field='id', verbose_name='评论文章')
parent_comment = models.ForeignKey(to='Comment', to_field='id', null=True, verbose_name='父评论ID')
def __str__(self):
return self.content
class ArticleUpDown(models.Model):
"""
文章点赞踩灭表
"""
user = models.ForeignKey(to='UserInfo', to_field='id', null=True, verbose_name='点赞或踩灭用户')
article = models.ForeignKey(to='Article', to_field='id', null=True, verbose_name='点赞或踩灭文章')
up_down = models.BooleanField(default=True, verbose_name='点赞或踩灭类型')
class Meta:
unique_together = ('user', 'article')
def __str__(self):
return self.article