BBS模型表创建
1750 字
9 分钟
BBS模型表创建
【零】创建公共表
- lib/CommonModel.py
from django.db import models
class CommonModel(models.Model): create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
class Meta: # 抽象模型类不能创建表 abstract = True【一】创建用户表
【1】创建模型表
- user/models.py
from django.db import modelsfrom lib import CommonModel
# Create your models here.'''先写普通字段再写外键字段'''
from django.contrib.auth.models import AbstractUser
# 用户表class UserInfo(AbstractUser, CommonModel): phone = models.BigIntegerField(verbose_name="手机号", help_text="手机号", null=True, blank=True) ''' null=True 数据库该字段可以为空 blank=True admin后台管理可以为空 '''
# 静态文件 static 写法 : 上传文件至项目的根目录下的 static 文件夹下 # 依赖于 Pillow 模块 : python -m pip install Pillow # avatar = models.FileField(verbose_name="用户头像", help_text="用户头像", # upload_to='static/avatar/', default='static/avatar/default.png') # 给avatar字段传文件对象,该文件会自动存储到 avatar 文件夹下,然后avatar字段只保存文件路径 例如 avatar/default.png(不上传文件的默认头像文件)
# 更新 media 写法 : 上传文件至项目的根目录下的media 文件夹下 avatar = models.FileField(verbose_name="用户头像", help_text="用户头像", upload_to='avatar/', default='static/avatar/default.png')
is_deleted = models.BooleanField(verbose_name="逻辑删除", help_text="逻辑删除", default=False)
# 用户关联个人站点 # 一对一关系:一个用户只能有一个个人站点,一个个人站点只能对应一个用户 blog = models.OneToOneField(verbose_name="关联博客", to="blog.Blog", on_delete=models.CASCADE, null=True)
# 配置数据库元信息 class Meta: # 指定数据库在后台显示的名字 verbose_name = "用户表" verbose_name_plural = verbose_name # 指定当前模型表在数据库中的表名 db_table = "userinfo"
# 默认以当前用户名返回 def __str__(self): return self.username【2】指定默认用户模型表
- 配置文件修改指定 User 表
# 默认用户模型指定AUTH_USER_MODEL = 'book.UserInfo'【二】创建站点表
- blog/models.py
from django.db import models
from lib import CommonModel
# Create your models here.# 个人站点表class Blog(CommonModel): site_name = models.CharField(verbose_name="站点名称", help_text="站点名称", max_length=32) site_title = models.CharField(verbose_name="站点标题", help_text="站点标题", max_length=32) site_theme = models.CharField(verbose_name="站点样式", help_text="站点样式", max_length=64) # css/js的文件路径
# 配置数据库元信息 class Meta: # 指定数据库在后台显示的名字 verbose_name = "个人站点表" verbose_name_plural = verbose_name # 指定数据库在后台显示的表名 db_table = "blog"
# 默认以当前站点名称返回 def __str__(self): return self.site_name
# 广告信息表class Adv(CommonModel): title = models.CharField(verbose_name="广告标题", help_text="广告标题", max_length=64) content = models.TextField(verbose_name="广告详细内容", help_text="广告详细内容") create_time = models.DateTimeField(verbose_name="创建时间", help_text="创建时间", auto_now=True) update_time = models.DateTimeField(verbose_name="更新时间", help_text="更新时间", auto_now_add=True) mobile = models.CharField(verbose_name="手机号", help_text="手机号", max_length=11, default="", blank=True)
# 静态文件 static 写法 : 上传文件至项目的根目录下的 static 文件夹下 # img = models.ImageField(verbose_name="广告图片", help_text="广告图片", # upload_to="static/advImg/", default="/static/advImg/default.jpg")
# 更新 media 写法 : 上传文件至项目的根目录下的media 文件夹下 img = models.ImageField(verbose_name="广告图片", help_text="广告图片", upload_to="advImg/%Y-%m", default="/static/advImg/default.jpg")
is_background_img = models.BooleanField(verbose_name="是否为轮播图", help_text="是否为轮播图", default=False)
# 配置数据库元信息 class Meta: # 数据库名字 db_table = "adv" # 指定数据库在后台显示的名字 verbose_name = '广告信息表' verbose_name_plural = verbose_name【三】创建文章相关表
- article/models.py
from django.db import models
from lib import CommonModel
# Create your models here.
# 文章表class Article(CommonModel): title = models.CharField(verbose_name="文章标题", max_length=64) desc = models.CharField(verbose_name="文章简介", max_length=255) content = models.TextField(verbose_name="文章内容") # create_time # update_time
# 数据库字段设计优化 up_num = models.BigIntegerField(verbose_name="点赞数", default=0) down_num = models.BigIntegerField(verbose_name="点踩数", default=0) comment_num = models.BigIntegerField(verbose_name="评论数", default=0)
# 文章关联个人站点 # 一对多关系:一篇文章只能对应一个个人站点,但是一个个人站点可以有多篇文章 blog = models.ForeignKey(verbose_name="关联博客", to="blog.Blog", on_delete=models.CASCADE, null=True) # 文章关联文章分类 # 多对一关系:一篇文章可以对应一个分类,但是一个分类下可以有多篇文章 category = models.ForeignKey(verbose_name="关联分类", to="CategoryClass", on_delete=models.CASCADE, null=True) # 文章关联文章标签 # 多对多关系:一篇文章可以对应多个标签,一个标签下可以有多篇文章 tags = models.ManyToManyField(verbose_name="关联文章和标签", to="CategoryTag", through='ArticleToTag', through_fields=("article", "tag"))
# 定义数据库元信息 class Meta: # 数据库表名 db_table = "article" # admin后台显示的表名称 verbose_name = "文章表" verbose_name_plural = verbose_name
# 默认以当前文章名称返回 def __str__(self): return self.title
# 文章分类表class CategoryClass(CommonModel): name = models.CharField(verbose_name="文章分类", max_length=32)
# 文章分类关联个人站点 # 一对多关系:一个文章分类只能对应一个个人站点,但是一个个人站点可以有多个文章分类 blog = models.ForeignKey(verbose_name="关联博客", to="blog.Blog", on_delete=models.CASCADE, null=True)
# 配置数据库元信息 class Meta: # 数据库表名 db_table = "category_class" # 后台管理显示的名称 verbose_name = "文章分类表" verbose_name_plural = verbose_name
# 默认以当前文章名返回 def __str__(self): return self.name
# 文章标签表class CategoryTag(CommonModel): name = models.CharField(verbose_name="文章标签", max_length=32) blog = models.ForeignKey(verbose_name="文章标签关联个人站点mi", to="blog.Blog", null=True, blank=True, on_delete=models.CASCADE)
# 配置数据库元信息 class Meta: # 数据库表名 db_table = "category_tag" # 后台管理显示的名称 verbose_name = "文章标签表" verbose_name_plural = verbose_name
# 默认以当前文章标签名返回 def __str__(self): return self.name
# 创建关联表,用于存储文章和标签的关联关系(多对多关系)class ArticleToTag(CommonModel): article = models.ForeignKey(verbose_name="关联文章", to="Article", on_delete=models.CASCADE, null=True) tag = models.ForeignKey(verbose_name="关联标签", to="CategoryTag", on_delete=models.CASCADE, null=True)
# 定义数据库元信息 class Meta: # 数据库表名 db_table = "article_to_tag" # admin后台显示的表名称 verbose_name = "文章关联标签" verbose_name_plural = verbose_name
# 点赞点踩表class UpAndDown(CommonModel): # 关联用户对象 # 多对一关系:一篇文章可以对应多个用户,一个用户可以对多篇文章进行点赞点踩 user = models.ForeignKey(verbose_name="关联用户", to='user.UserInfo', on_delete=models.CASCADE) # 关联文章对象 article = models.ForeignKey(verbose_name="关联文章", to='Article', on_delete=models.CASCADE) # 点赞点踩状态 up_or_down = models.BooleanField(verbose_name="是否点赞点踩")
# create_time # update_time
# 定义数据库元信息 class Meta: # 数据库表名 db_table = "up_and_down" # admin后台显示的表名称 verbose_name = "点赞点踩表" verbose_name_plural = verbose_name
# 评论表class Comment(CommonModel): # 关联用户对象 # 多对一关系:一篇文章可以对应多个用户,一个用户可以对多篇文章进行评论 user = models.ForeignKey(verbose_name="关联用户", to='user.UserInfo', on_delete=models.CASCADE) # 关联文章对象 # 多对一关系:一篇文章可以对应多个评论,一个评论只能对应一篇文章 article = models.ForeignKey(verbose_name="关联文章", to='Article', on_delete=models.CASCADE) # 评论内容 content = models.CharField(verbose_name="评论内容", max_length=255) # 评论的父评论 , 有些评论就是根评论 parent = models.ForeignKey(verbose_name="自关联主评论", to="self", on_delete=models.CASCADE, null=True, blank=True) is_deleted = models.BooleanField(verbose_name="是否删除评论,假删除", default=False)
# create_time # update_time
# 定义数据库元信息 class Meta: # 数据库表名 db_table = "comment" # admin后台显示的表名称 verbose_name = "用户评论表" verbose_name_plural = verbose_name【四】迁移数据库
【1】生成迁移文件
python manage.py makemigrations【2】迁移记录生效
python manage.py migrate支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
相关文章智能推荐
1
C 语言发展史
编程语言了解 C 语言从 BCPL、B 语言到现代标准 C 的发展历程、核心特点与应用领域。
2
C 语言开发环境的安装与配置
编程语言在 Windows、Linux 与 macOS 上安装 C 工具链,配置编辑器,并编译运行第一个 C 程序。
3
C 语言初识:程序运行机制与基本结构
编程语言认识 C 程序从源代码到运行的完整流程,以及基础语法和程序的基本结构。
4
C 语言基础:注释、关键字、变量与数据类型
编程语言学习 C 语言的注释、关键字、标识符、常量、变量和基本数据类型等基础知识。
5
C 语言数据类型
编程语言理解 C 语言的数据类型体系,包括基本类型、整数类型、浮点类型和逻辑类型。
随机文章随机推荐














