Django博客项目之表关系设计

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

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

时间: 2024-10-08 20:16:18

Django博客项目之表关系设计的相关文章

Django博客项目之登录和注册系统

一.环境准备 1.配置文件 settings.py文件: 增加一项内容实现UserInfo表继承Django用户认证的表 AUTH_USER_MODEL="blog.UserInfo" TEMPLATES = [     {         'BACKEND': 'django.template.backends.django.DjangoTemplates',         'DIRS': [os.path.join(BASE_DIR, 'templates')]         

Django——博客项目

博客项目 目前的目标是构建一个基于Django的前后端完整的博客系统,首先对项目流程整理如下: 1. 分析需求 1.1. 1.基于用户认证组件和Ajax实现登录验证 1.2. 基于forms组件和Ajax实现注册功能 1.3. 设计系统首页(文章列表渲染) 1.4. 设计个人站点页面 1.5. 文章详情页 1.6. 实现文章点赞功能 1.7. 实现文章的评论 1.7.1. 文章的评论 1.7.2. 评论的评论 1.8. 富文本编辑框和防止xss攻击 2. 设计表结构 module代码: from

Django博客项目之首页

一.Django-admin 1.创建表和注册表 settings.py文件: TIME_ZONE = 'Asia/Shanghai'    #支持中文数据 models.py文件内容: from django.db import models from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser):     """     用户信息     ""&q

django -> 博客项目sqlite数据迁移至mysql

准备: 云服务器上安装mysql 本地虚拟环境安装mysqlclient(下载地址): python -m pip install  mysqlclient-1.4.4-cp36-cp36m-win_amd64.whl mysql数据设置 # root账号登录 mysql -u root -p # 创建数据库 — mysite_db create database mysite_db default charset=utf8mb4 default collate utf8mb4_unicode_

Django博客项目之个人站点

一.对url做分发 项目cnblog_s20的urls.py内容: from django.conf.urls import url,include from django.contrib import admin from blog import views from django.views.static import serve from cnblog_s20 import settings urlpatterns = [     url(r'^admin/', admin.site.ur

Django学习---多人博客项目(2)

Django学习---多人博客项目(2) ? 上一部分内容完成了博客项目的搭建,以及博客标题和博客内容的展示,熟悉了Django的使用,下面,接着实现用户管理部分功能. 一.自定义模板和静态文件的位置 (1)自定义模板的位置 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 当前文件路径的上两级文件路径--即是根目录 TEMPLATES = [ { 'BACKEND': 'django.templat

建立django博客应用及数据库模型

1.现在就来创建我们的 Django 博客应用,我把它命名为 blog.激活虚拟环境,进入到 manage.py 文件所在的目录下,运行 python manage.py startapp blog 命令即可建立一个 blog 应用 这个应用的文件夹结构 Django 已经为我们建立好了,但它还只是包含各种文件的一个文件夹而已,Django 目前还不知道这是一个应用.我们得告诉 Django 这是我们建立的应用,专业一点说就是在 Django 的配置文件中注册这个应用.打开 blogprojec

数据库 表关系设计参考

表关系设计 出版社表关系 # 出版社表 class Publisher(models.Model): name = models.CharField(max_length=32) addr = models.CharField(max_length=128) phone = models.IntegerField() def __str__(self): return self.name # 作者表 class Author(models.Model): name = models.CharFi

BBS项目 基本表关系

from django.db import models # Create your models here. from django.contrib.auth.models import AbstractUser #用户表#继承了AbstractUser,添加我们需要的字段,手机号,头像,一对一关系class UserInfo(AbstractUser): nid=models.AutoField(primary_key=True) phone=models.CharField(max_len