一、需要创建的表以及表之间的关系
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)
三、关系表图
原文地址:http://blog.51cto.com/qidian510/2116023