BBS
Models 表模型
from django.contrib.auth.models import AbstractUser class User(AbstractUser): """ 用户表:User username:账号 password:密码 data_joined:注册时间 avatar:图像 telephone:电话 blog:博客站点(一对一) """ avatar = models.FileField(upload_to='avatar/', default="static/img/user.png") # upload_to自动生成存文件的地方,mysql只会存路径 telephone = models.CharField(max_length=11) blog = models.OneToOneField(to="Blog", null=True, on_delete=models.SET_NULL, db_constraint=False) # 用于与站点一对一 def __str__(self): return self.username class Blog(models.Model): """ 博客站点表:Blog name:站点名 title:标题 theme:站点主体样式 category:拥有的分类(多对多) tag: 拥有的标签(多对多) """ site = models.CharField(max_length=32, unique=True) name = models.CharField(max_length=32) title = models.CharField(max_length=64) theme = models.CharField(max_length=128) category = models.ManyToManyField(to="Category", db_constraint=False) # 站点与分类多对多 通过第三表连接 tag = models.ManyToManyField(to="Tag", db_constraint=False) # 站点与标签多对多 通过第三表连接 def __str__(self): return self.name class Category(models.Model): # 分类表:Category # name:分类名 name = models.CharField(max_length=32, unique=True) def __str__(self): return self.name class Tag(models.Model): # 标签表:Tag # name:标签名 name = models.CharField(max_length=32,unique=True) def __str__(self): return self.name class Article(models.Model): # title:文章标题 # desc:文章摘要 # content:文章内容 # create_time:发布时间 # blog:所属博客站点(一对多) # category:所属分类(一对多) # tag:拥有的标签(多对多) title = models.CharField(max_length=64) desc = models.CharField(max_length=256) # content = models.TextField() # 不经常差的提取出来,加快查询 create_time = models.DateField(auto_now_add=True) blog = models.ForeignKey(to="Blog",null=True,on_delete=models.SET_NULL,db_constraint=False) # 站点与文章一对多 # category = models.ForeignKey(to="Category",null=True,on_delete=models.SET_NULL,db_constraint=False) # 分类与文章一对多 # tag = models.ManyToManyField(to="Tag", db_constraint=False) # 文章与标签多对多 article_detail = models.OneToOneField(to="ArticleDetail", null=True, on_delete=models.SET_NULL, db_constraint=False, blank=True) up_count = models.IntegerField(default=0) # 点赞数 down_count = models.IntegerField(default=0) # 点踩数 comment_count = models.IntegerField(default=0) def __str__(self): return self.title # 对文章表抽取不常用字段,加快查询 class ArticleDetail(models.Model): content = models.TextField() category = models.ForeignKey(to="Category", null=True,on_delete=models.SET_NULL, db_constraint=False) # 分类与文章一对多 tag = models.ManyToManyField(to="Tag", db_constraint=False) # 文章与标签多对多 # def __str__(self): # return self.category class UpOrDown(models.Model): # user:点赞点踩用户(一对多) # article:点赞点踩文章(一对多) # is_up:点赞或点踩 user = models.ForeignKey(to="User", null=True, on_delete=models.SET_NULL, db_constraint=False) article = models.ForeignKey(to="Article", null=True, on_delete=models.SET_NULL, db_constraint=False) is_up = models.BooleanField() def __str__(self): return self.user.username + " | " + self.article.title + ">>>" + str(self.is_up) # 实际开发这种表存在大量的修改操作,不建议建立索引(索引服务于查询的) class Meta: # 元信息 unique_together = ('user', 'article') verbose_name = "赞踩" verbose_name_plural = verbose_name class Common(models.Model): # 评论表:Common # user:评论者(一对多) # article:评论文章(一对多) # content:评论内容 # parent:父评论(自关联) user = models.ForeignKey(to="User",null=True, on_delete=models.SET_NULL, db_constraint=False) article = models.ForeignKey(to="Article",null=True, on_delete=models.SET_NULL, db_constraint=False) content = models.TextField() parent = models.ForeignKey(to="self",null=True, on_delete=models.SET_NULL, db_constraint=False) # 自关联 def __str__(self): return str(self.user.id) + "" + str(self.article.id) + "" + str(self.parent) class Meta: verbose_name = "评论" verbose_name_plural = verbose_name