from django.db import models
# Create your models here.
from django.contrib.auth.models import User, AbstractUser
class UserInfo(AbstractUser):
'''用户信息'''
nid = models.AutoField(primary_key=True)
telephone = models.CharField(max_length=11, null=True, unique=True)
avatar = models.FileField(upload_to='avatar/', default='/avatars/default.png')
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
'''
DateField和DateTimeField,后者有时分秒
auto_now_add:配置auto_now_add,创建数据记录的时候会把当前时间添加到数据库
auto_now:配置auto _now,每次更新数据记录的时候会更新该字段
'''
blog = models.OneToOneField(to='Blog', to_field='nid', null=True, on_delete=models.CASCADE)
def __str__(self):
return self.username
class Blog(models.Model):
'''
博客信息表(站点表)
'''
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='个人博客标题', max_length=64)
site_name = models.CharField(verbose_name='站点名称', max_length=64)
theme = models.CharField(verbose_name='博客主主题', max_length=32)
def __str__(self):
return self.title
class Category(models.Model):
'''
博主个人文章分类表
'''
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='分类标题', max_length=32)
blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid', on_delete=models.CASCADE)
def __str__(self):
return self.title
class Tag(models.Model):
'''
博客标签表
'''
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='标签名称', max_length=32)
blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid', on_delete=models.CASCADE)
def __str__(self):
return self.title
class Article(models.Model):
nid=models.AutoField(primary_key=True)
title=models.CharField(max_length=50,verbose_name='文章标题')
desc=models.CharField(max_length=255,verbose_name='文章描述')
create_time=models.DateTimeField(verbose_name='创建时间',auto_now_add=True)
content=models.TextField()
comment_count=models.IntegerField(default=0)
up_count=models.IntegerField(default=0)
down_count=models.IntegerField(default=0)
user=models.ForeignKey(verbose_name='作者',to='UserInfo',to_field='nid',on_delete=models.CASCADE)
category=models.ForeignKey(to='Category',to_field='nid',null=True,on_delete=models.CASCADE)
#需要手动创建多对多关系的第三张表
tags=models.ManyToManyField(
to='Tag',
through='Article2Tag',
through_fields=('article','tag'),
)
def __str__(self):
return self.title
class Article2Tag(models.Model):
nid=models.AutoField(primary_key=True)
article=models.ForeignKey(verbose_name='文章',to='Article',to_field='nid',on_delete=models.CASCADE)
tag=models.ForeignKey(verbose_name='标签',to='Tag',to_field='nid',on_delete=models.CASCADE)
class Meta:
unique_together=[
('article','tag')
]
def __str__(self):
v=self.article.title+'--------'+self.tag.title
return v
class ArticleUpDown(models.Model):
'''
文章的点赞点踩表
'''
nid=models.AutoField(primary_key=True)
user=models.ForeignKey(null=True,to="UserInfo",to_field='nid',on_delete=models.CASCADE)
article=models.ForeignKey(null=True,to='Article',to_field='nid',on_delete=models.CASCADE)
is_up=models.BooleanField(default=True)
class Meta:
unique_together=[
('article','user')
]
class Comment(models.Model):
'''
评论表
'''
nid=models.AutoField(primary_key=True)
user=models.ForeignKey(verbose_name='评论者',to='UserInfo',to_field='nid',on_delete=models.CASCADE)
article=models.ForeignKey(verbose_name='评论的文章',to='Article',to_field='nid',on_delete=models.CASCADE)
create_time=models.DateTimeField(verbose_name='创建时间',auto_now_add=True)
content=models.CharField(verbose_name='评论内容',max_length=255)
parent_comment=models.ForeignKey('self',null=True,on_delete=models.CASCADE)
def __str__(self):
return self.content