一、需要创建的表以及表之间的关系

1、User(用户信息表)

User表和Blog表是一对一关系,即一个用户对应一个个人站点

2、Blog(个人站点表)

3、Category(文章分类表)

Blog和Category表是一对多关系,即一个站点可以有多个分类,但是一个分类只属于一个站点

4、Tag(文章标签表)

Blog和Tag表是一对多关系,即一个站点可以有多个标签,但是一个标签只属于一个站点

5、Article(文章表)

User和Article表是一对多关系,即一个用户可以有多篇文章,但是一篇文章只属于一个用户

Category和Article表是一对多关系,即一种分类可以有多篇文章,但是一篇文章只属于一种分类

Tag和Article表是多对多关系,即一个标签可以属于多篇文章,一篇文章可以有多个标签

6、Article_detail(文章详情表)

Article表Article_detail表是一对一关系,即每一篇文章对应一个文章详情

7、Article_updown(文章点赞踩灭表)

Article表和Article_updown表是一对多关系,一篇文章可以有多个点赞踩灭,但是一个点赞踩灭只属于一篇文章

8、Comment(评论表)

Article表和Comment表是一对多关系,一篇文章可以有多个评论,但是一个评论只属于一篇文章


二、表关系设计的几个注意内容

1、关于用户表继承

因为在makemigrations和migrate的时候会自动生成auth_user表,可以继承自定义的auth_user表,然后在表里增加一些我们需要的字段
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
    pass
要是这样用继承的话需要在settings中配置一下:
AUTH_USER_MODEL ="应用名称.UserInfo"


2、关于头像的相关设置

avatar = models.FileField(verbose_name="头像",upload_to="avatar",default="/avatar/default.png")
upload_to:上传到的具体位置
default:默认位置


3、自定义多对多关系的第三张表

class Tag(models.Model):
    pass
class Article(models.Model):
    tags = models.ManyToManyField(
        to="Tag",
        through="article2tag",
        through_fields=('article', 'tag')
    )  #through="article2tag"表示使用自定义的Article2tag表而不使用Django生成的表,through_fields=('article', 'tag')相当于给这两个字段关联
class Article2tag(models.Model):
    article = models.ForeignKey(verbose_name="文章",to="Article")
    tag = models.ForeignKey(verbose_name="标签",to="Tag")
    class Meta:
        unique_together = [
            ("article","tag")                   #"article"和"tag"两个字段联合唯一
        ]

4、自关联的两种表示方式,假设为null的时候是文章赞

(1)第一种方式

farther_comment = models.ForeignKey(to="Comment",verbose_name="父级评论",null=True,blank=True)

(2)第二种方式

farther_comment = models.ForeignKey("self",verbose_name="父级评论",null=True,blank=True)


三、关系表图

list.png