zoukankan      html  css  js  c++  java
  • 博客系统之mdels 表关系

    一、首先理清各表之间的关系:

    二、依照上图的关系建立models:

    User用户表:(继承django自带的用户表,在配置文件中务必加)

    
    

    User用户表:(继承django自带的用户表,在配置文件中务必加)

        字段:

          nid(编号)

          nickname(昵称)

          telephone(手机号)

          avatar(头像)

          create_time(创建时间)

        
    Blog博主个人站点表: 字段: title(标题) url(url后缀) theme(个人博客主题) user(对应用户)
    ---------和用户表一对一 Classfication文章分类表: 字段: title(类别名) blog(所属博客)---------和博客表多对一
    Article 文章表: 字段: title(标题) summary(文章摘要) read_count(文章阅读量) comment_count(文章评论数量) create_time(文章创建时间) classify(文章类型)    
    和类型表多对一 user(所属用户)      和用户表多对一 tags(标签)        和标签表多对多
    Article_detail文章详情表:
    字段: content(文章类容) article(所属文章)      
    和文章表示一对一 Comment评论表:
        字段: content(评论类容) create_time(创建时间) up_count(评论量) user(评论者)        
    和用户多对一 article(评论文章)      和文章表多对一 parent_comment(父级评论)    和自己自关联(为的是能自己评论自己,可以评论别人的评论)
    Comment_poll评论点赞表: 字段: user(点赞的用户)        
    和用户表多对一 comment(被点赞评论)      和评论表多对一
    Article_poll文章点赞表(ArticleUp): 字段: user(点赞的用户)      
    和用户表多对一 comment(被点赞文章)    和文章表多对一 Tag标签表(Tag):
    字段: title(标签名称) bolg(所属博客)        
    和博客表多对一 Article2Tag文章和标签关系表: 字段: article(文章)        和文章表多对一 tag(标签)            和标签表多对一

    三、models中代码实现建表:

      1 from django.db import models
      2 from django.conf import settings
      3 from django.contrib.auth.models import AbstractUser
      4 # Create your models here.
      5 class UserInfo(AbstractUser):   #settings  :AUTH_USER_MODEL ="项目名称.UserInfo"
      6     '''用户信息表
      7    继承了django自带的用户表所以在配置文件中务必要加上AUTH_USER_MODEL='项目名称'.UserInfo
      8     '''
      9 
     10     nid = models.BigAutoField(primary_key=True)
     11     nickname =models.CharField(max_length=32,verbose_name="昵称",unique=True)
     12     tel = models.IntegerField(verbose_name="电话",unique=True,null=True,blank=True)
     13     email = models.CharField(max_length=64,verbose_name="邮箱")
     14     avatar = models.FileField(verbose_name="头像",upload_to="avatar",default="/avatar/default.png")
     15     create_time = models.DateTimeField(verbose_name="创建时间",auto_now_add=True)
     16 
     17     class Meta:
     18         verbose_name_plural = "用户信息表"
     19     def __str__(self):
     20         return self.username
     21 
     22 class Article(models.Model):
     23     '''
     24     文章表
     25     '''
     26     title = models.CharField(max_length=64,verbose_name="文章标题")
     27     summary = models.CharField(max_length=244, verbose_name="文章概要")
     28     create_time = models.DateTimeField(verbose_name="创建时间",auto_now_add=True)
     29     update_time = models.DateTimeField(verbose_name="修改时间",auto_now=True)
     30     poll_count = models.IntegerField(verbose_name="点赞数",default=0)
     31     comment_count = models.IntegerField(verbose_name="评论数",default=0)
     32     read_count = models.IntegerField(verbose_name="阅读数",default=0)
     33   
     34     user = models.ForeignKey(to="UserInfo",verbose_name="所属作者",null=True,blank=True)
     35     classify = models.ForeignKey(to="Classfication",verbose_name="所属类别",null=True,blank=True)
     36     tags = models.ManyToManyField(to="Tag",through="Article2tag",through_fields=('article', 'tag'),verbose_name="所属标签")
     37     type_choices = [
     38         (1,"编程语言"),
     39         (2,"软件设计"),
     40         (3,"前端系列"),
     41         (4,"数据库"),
     42         (5,"操作系统")
     43     ]
     44     artcle_type_id = models.IntegerField(choices=type_choices,default=None)
     45     class Meta:
     46         verbose_name_plural = "文章表"
     47     def __str__(self):
     48         return self.title
     49 
     50 class Article_detail(models.Model):
     51     '''文章细节表'''
     52     article = models.OneToOneField(to="Article",verbose_name="所属文章")
     53     content =models.TextField(max_length=400,verbose_name="文章内容")
     54 
     55     class Meta:
     56         verbose_name_plural = "文章细节表"
     57 
     58 class Tag(models.Model):
     59     '''标签表'''
     60     name = models.CharField(max_length=32,verbose_name="标签名")
     61     blog = models.ForeignKey(to="Blog",verbose_name="所属博客")
     62     class Meta:
     63         verbose_name_plural = "标签表"
     64 
     65 class Article2tag(models.Model):
     66     article = models.ForeignKey(verbose_name="文章",to="Article")
     67     tag = models.ForeignKey(verbose_name="标签",to="Tag")
     68     class Meta:
     69         '''联合唯一'''
     70         unique_together = [
     71             ("article","tag")
     72         ]
     73 
     74 class Comment(models.Model):
     75     '''评论表'''
     76     time = models.DateTimeField(verbose_name="评论时间",auto_now_add=True)
     77     content = models.CharField(max_length=265,verbose_name="评论内容")
     78     up_count = models.IntegerField(default=0)
     79     user = models.ForeignKey(to="UserInfo",verbose_name="评论人",null=True,blank=True)
     80     article = models.ForeignKey(to="Article",verbose_name="评论文章",null=True,blank=True)
     81     farther_comment = models.ForeignKey(to="Comment",verbose_name="父级评论",null=True,blank=True)
     82     # farther_comment = models.ForeignKey("self",verbose_name="父级评论",null=True,blank=True)
     83 
     84     class Meta:
     85         verbose_name_plural = "评论表"
     86 
     87 class Article_poll(models.Model):
     88     '''文章点赞表'''
     89     time = models.DateTimeField(verbose_name="点赞时间",auto_now_add=True)
     90     article = models.ForeignKey(to="Article",verbose_name="点赞文章",null=True,blank=True)   #一个文章可以有多个赞
     91     user = models.ForeignKey(to="UserInfo",verbose_name="点赞人",null=True,blank=True)
     92     is_positive = models.BooleanField(default=1,verbose_name="点赞或踩")
     93 
     94     class Meta:
     95         '''联合唯一'''
     96         unique_together = ("user", "article",)
     97         verbose_name_plural = "文章点赞表"
     98 
     99 class Comment_poll(models.Model):
    100     '''评论点赞表'''
    101     time=models.DateTimeField(verbose_name="点赞时间",auto_now_add=True)
    102     # is_positive = models.BooleanField(verbose_name="点赞或踩",default=1)
    103     user = models.ForeignKey(to="UserInfo",verbose_name="点赞用户",null=True,blank=True)
    104     comment = models.ForeignKey(to="Comment",verbose_name="点赞所属评论",null=True,blank=True)   #一个评论可以有多个赞
    105 
    106     class Meta:
    107         '''联合唯一'''
    108         unique_together = ("user","comment",)
    109         verbose_name_plural = "评论点赞表"
    110 
    111 class Blog(models.Model):
    112     '''个人站点表'''
    113     title = models.CharField(max_length=32,verbose_name="个人博客标题")
    114     url = models.CharField(max_length=64,verbose_name="路径",unique=True)
    115     theme = models.CharField(max_length=32,verbose_name="博客主题")
    116     user = models.OneToOneField(to="UserInfo", verbose_name="所属用户")
    117     class Meta:
    118         '''通过admin录入数据的时候个中文显示'''
    119         verbose_name_plural = "个人站点表"
    120 
    121     def __str__(self):
    122         return self.title
    123 
    124 class Classfication(models.Model):
    125     '''博主个人文章分类表'''
    126     title = models.CharField(max_length=32, verbose_name="分类标题")
    127     blog = models.ForeignKey(to="Blog",verbose_name="所属博客")
    128 
    129     class Meta:
    130         verbose_name_plural = "分类表"
    View Code
  • 相关阅读:
    微信公众号菜单demo
    Hosts 广告
    thinkphp用swiftmailer发邮件demo
    微信小程序小结(4) -- 分包加载及小程序间跳转
    微信小程序小结(5) -- 常用语法
    常用SQL语句及在node中使用MySQL
    JavaScript -- tips
    CSS3 -- FlexBox(弹性盒子)
    gulp使用文档
    yarn快速使用及实践建议
  • 原文地址:https://www.cnblogs.com/kxllong/p/7858528.html
Copyright © 2011-2022 走看看