首页 > 其他分享 >多表操作之模型创建

多表操作之模型创建

时间:2023-11-29 18:22:40浏览次数:24  
标签:多表 models 创建 模型 length max CharField True id

1 图书表:book,作者表:author,作者详情表:authordetail,出版社表:publish,(第三张中间表)
2 作者跟作者详情:是一对一,关联字段写在哪一方都可以
3 图书跟出版社:是一对多,一对多关系一旦确立,关联字段写在多的一方
4 图书和作者:是多对多,多对多的关系需要建立第三张表(可以自动生成)

5 models.py中把关系建立出来
from django.db import models
### django: 1.11.1 2.0.7
# Create your models here.
class Publish(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
addr = models.CharField(max_length=64)
phone = models.CharField(max_length=64)
email = models.EmailField()


class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
price = models.DecimalField(max_digits=6, decimal_places=2)
publish_date = models.DateTimeField(auto_now_add=True)

# to='Publish'跟Publish表做关联(ForeignKey,一对多)
# to_field='id'跟哪个字段做关联
# publish=models.CharField(max_length=32)
# publish=models.ForeignKey(to='Publish',to_field='id')
# publish = models.ForeignKey(to='Publish') # 不写,默认跟主键做关联
publish = models.ForeignKey(to=Publish) # 不写,默认跟主键做关联

# 自动创建出第三张表(这句话会自动创建第三章表)
# authors在数据库中不存在该字段,没有to_field
# 默认情况:第三张表有id字段,当前Book表的id和Author表的id字段
authors=models.ManyToManyField(to='Author')


class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.SmallIntegerField()
# 一对一的本质是 ForeignKey+unique
author_detail=models.OneToOneField(to='AuthorDetail',to_field='id')
# author_detail=models.ForeignKey(to='AuthorDetail',to_field='id',unique=True)


class AuthorDetail(models.Model):
id = models.AutoField(primary_key=True)
sex = models.SmallIntegerField()
addr = models.CharField(max_length=64)
phone = models.BigIntegerField()


6 同步到mysql数据库
-配置文件
-pymysql.install_as_mysqldb()
-公司可以用过的mysqlclient
-两条命令

7 2.x版本的django
-外键字段必须加 参数:on_delete
-1.x版本不需要,默认就是级联删除
-假设,
删除出版社,该出版社出版的所有图书也都删除,on_delete=models.CASCADE
删除出版社,该出版社出版的图书不删除,设置为空on_delete=models.SET_NULL,null=True
删除出版社,该出版社出版的图书不删除,设置为默认on_delete=models.SET_DEFAULT,default=0

标签:多表,models,创建,模型,length,max,CharField,True,id
From: https://www.cnblogs.com/97zs/p/17865551.html

相关文章

  • 在Windows操作系统上创建和管理服务的工具,它们各自有不同的特点和用途
    在Windows操作系统上创建和管理服务的工具,它们各自有不同的特点和用途。XYNTservice:XYNTservice是一个开源的软件,它可以将任何可执行文件转换为Windows服务。通过XYNTservice,你可以将你的应用程序注册为Windows服务,使其能够在系统启动时自动运行,并以服务的身份在后台运......
  • 大模型在docker中运行(个人电脑)
    1、环境搭建windows需要安装docker参见:WindowsDocker安装|菜鸟教程(runoob.com)windows需要开启WSL2、并安装 为了开启gpus加速,参见: win10DockerDesktop使用GPU_windowsdocker使用gpu_刘丶小歪的博客-CSDN博客设置docker启动容器的内存,设置为12G,参见: 修改WSL2......
  • lvm创建单独磁盘
    pvcreate/dev/nvme0n2 pvsvgcreate/dev/nvme0n2gcreatevg/dev/nvme0n2lvcreate-Lvg+80G   lvcreate-nlvdata-L2Gvgpvs vgs lvdisplay lvs lsblk fdisk-l lvextend-l+100%FREE/dev/mapper/vg-lvdata......
  • B树删除和创建(C)
    不得不说,这个我写了两天。第一天晚上想移植一篇博客的,后来经过四个小时发现是错了谁懂啊!今天早上又找了一篇,大错误我都改了,有一个潜在的小bug是自己调试跳出来的,谁懂啊!得找阅读量高的才行!先把刚刚的小错误放一下 也不知道博主怎么想的,同时i和keynum++,害,害我好找!!!改后就好了......
  • 记录一次MySQL多表查询,order by不走索引的情况.
    首先是表结构,部分字段脱敏已删除 CREATETABLE`log_device_heart`(`id`intunsignedNOTNULLAUTO_INCREMENT,`device_number`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciNOTNULL,`time_periods_begin`datetimeNOTNULL,`time_peri......
  • 解锁AIGC大模型,打造你的专属虚拟女友
    什么是AIGC大模型?AIGC大模型是一种基于人工智能技术的生成式模型,它可以根据用户的输入和偏好,生成具有高度真实感和个性化的虚拟人物。这些虚拟人物不仅拥有独特的外貌、声音和性格,还可以与用户进行智能互动,为用户提供陪伴、娱乐和情感支持。如何打造专属虚拟女友?想要打造一位专......
  • 网络参考模型
    先上图,我们慢慢讲,如下:TCP/IP标准模型OSI参考模型TCP/IP对等模型协议应用层 应用层应用层 Telnet23FTP20/21TFTP69SNMP表示层HTTP80SMTPDNSDHCP会话层 主机到主机层传输层传输层TCPUDP......
  • vue 创建 项目方式
    使用webpack创建vuecreatepageName资料https://cli.vuejs.org/zh/guide/使用vite创建npmcreatevue@latest资料https://cn.vitejs.dev/guide/clihttps://github.com/vuejs/create-vue......
  • linux 使用crontab 创建定时任务
    转载请注明出处:在服务器中需要创建一个定时任务,每天执行去清理很早之前备份的文件,所以想到在linux上创建一个shell脚本,通过linux的crontab命令定时去执行该shell脚本,从而实现定时清理服务器文件。crontab是Linux系统中用于调度任务的命令,它允许用户在固定的间隔时间执行......
  • SAP集成技术(八)成熟度模型
    成熟度模型的目的在于使用模型和标准来评估当前的集成能力,并确定必须建立哪些能力,以达到期望的成熟度级别。成熟度级别描述了一个特定主题复杂性对于某种方法或模型的成熟度。基于定义的需求和标准的分类,得出不同的成熟度级别。要达到某个成熟度级别,必须能证明实现了相应级别描述......