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

 

posted @ 2019-04-10 08:34  星牧  阅读(208)  评论(0编辑  收藏  举报