1.数据库表创建及同步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | """ 由于django自带的sqlite数据库对日期不敏感,所以我们换成MySQL """ from django.db import models # Create your models here. """ 先写普通字段 之后再写外键字段 """ from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): phone = models.BigIntegerField(verbose_name = '手机号' ,null = True ) # 头像 avatar = models.FileField(upload_to = 'avatar/' ,default = 'avatar/default.png' ,verbose_name = '用户头像' ) """ 给avatar字段传文件对象 该文件会自动存储到avatar文件下 然后avatar字段只保存文件路径avatar/default.png """ create_time = models.DateField(auto_now_add = True ) blog = models.OneToOneField(to = 'Blog' ,null = True ) class Blog(models.Model): site_name = models.CharField(verbose_name = '站点名称' ,max_length = 32 ) site_title = models.CharField(verbose_name = '站点标题' ,max_length = 32 ) # 简单模拟 带你认识样式内部原理的操作 site_theme = models.CharField(verbose_name = '站点样式' ,max_length = 64 ) # 存css/js的文件路径 class Category(models.Model): name = models.CharField(verbose_name = '文章分类' ,max_length = 32 ) blog = models.ForeignKey(to = 'Blog' ,null = True ) class Tag(models.Model): name = models.CharField(verbose_name = '文章标签' ,max_length = 32 ) blog = models.ForeignKey(to = 'Blog' , null = True ) class Article(models.Model): title = models.CharField(verbose_name = '文章标题' ,max_length = 64 ) desc = models.CharField(verbose_name = '文章简介' ,max_length = 255 ) # 文章内容有很多 一般情况下都是使用TextField content = models.TextField(verbose_name = '文章内容' ) create_time = models.DateField(auto_now_add = True ) # 数据库字段设计优化 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(to = 'Blog' , null = True ) category = models.ForeignKey(to = 'Category' ,null = True ) tags = models.ManyToManyField(to = 'Tag' , through = 'Article2Tag' , through_fields = ( 'article' , 'tag' ) ) class Article2Tag(models.Model): article = models.ForeignKey(to = 'Article' ) tag = models.ForeignKey(to = 'Tag' ) class UpAndDown(models.Model): user = models.ForeignKey(to = 'UserInfo' ) article = models.ForeignKey(to = 'Article' ) is_up = models.BooleanField() # 传布尔值 存0/1 class Comment(models.Model): user = models.ForeignKey(to = 'UserInfo' ) article = models.ForeignKey(to = 'Article' ) content = models.CharField(verbose_name = '评论内容' ,max_length = 255 ) comment_time = models.DateTimeField(verbose_name = '评论时间' ,auto_now_add = True ) # 自关联 parent = models.ForeignKey(to = 'self' ,null = True ) # 有些评论就是根评论 ``` |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具