'''
1 models 导入模块
from django.contrib.auth.models import AbstractUser
2 settings 注册
AUTH_USER_MODEL = 'app01.UserInfo'
3 创建表
4 创建表关系 多表创建,一对一,一对多,多对多
'''
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')
'''
给avatar字段传文件对象,该文件会自动存储到avatar 文件下然后avatar字段只保个子文件的路径
'''
create_time = models.DateField(auto_now_add=True)
# 外键字段
blog = models.OneToOneField(to='Blog',null=True,on_delete=models.CASCADE)
class Blog(models.Model):
site_name = models.CharField(verbose_name='站点名称',max_length=32)
site_title = models.CharField(verbose_name='站点标题',max_length=32)
# 存css ,js 样式路径
site_theme = models.CharField(verbose_name='站点样式',max_length=64)
class Category(models.Model):
name = models.CharField(verbose_name='文章分类',max_length=32)
# 外键字段
blog = models.ForeignKey(to='Blog',null=True,on_delete=models.CASCADE)
class Tag(models.Model):
name = models.CharField(verbose_name='文章标签',max_length=32)
# 外键字段
blog = models.ForeignKey(to='Blog',null=True,on_delete=models.CASCADE)
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,on_delete=models.CASCADE)
category = models.ForeignKey(to='Category',null=True,on_delete=models.CASCADE)
#多对多
tags = models.ManyToManyField(to=Tag,
through='Article2Tag',
through_fields=('article','tag'),
)
#多对多三个种创建 ,半自动
class Article2Tag(models.Model):
article = models.ForeignKey(to='Article',on_delete=models.CASCADE)
tag =models.ForeignKey(to='Tag',on_delete=models.CASCADE)
class UpAndDown(models.Model):
user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)
article = models.ForeignKey(to='Article',on_delete=models.CASCADE)
is_up = models.BooleanField() # 传布尔值 存0、1
class Comment(models.Model):
user = models.ForeignKey(to='UserInfo',on_delete=models.CASCADE)
article = models.ForeignKey(to='Article',on_delete=models.CASCADE)
content = models.CharField(verbose_name='评论内容',max_length=255)
content_time =models.DateField(verbose_name='评论时间', auto_now_add=True)
# 自关联
parent = models.ForeignKey(to='self',null=True,on_delete=models.CASCADE)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!