首页 > 其他分享 >django orm中如何创建表关系

django orm中如何创建表关系

时间:2023-11-20 20:58:41浏览次数:24  
标签:关系 models 创建 外键 django orm max id

表与表之间的关系
一对多

多对多

一对一

没有关系

判断表关系的方法:换位思考
"""
图书表

出版社表

作者表

作者详情表


"""
图书和出版社是一对多的关系 外键字段建在多的那一方 book

图书和作者是多对多的关系 需要创建第三张表来专门存储

作者与作者详情表是一对一
"""
from django.db import models

# Create your models here.


# 创建表关系 先将基表创建出来 然后再添加外键字段
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8,decimal_places=2)
# 总共八位 小数点后面占两位
"""
图书和出版社是一对多 并且书是多的一方 所以外键字段放在书表里面
"""
publish = models.ForeignKey(to='Publish') # 默认就是与出版社表的主键字段做外键关联
"""
如果字段对应的是ForeignKey 那么会orm会自动在字段的后面加_id
如果你自作聪明的加了_id那么orm还是会在后面继续加_id

后面在定义ForeignKey的时候就不要自己加_id
"""


"""
图书和作者是多对多的关系 外键字段建在任意一方均可 但是推荐你建在查询频率较高的一方
"""
authors = models.ManyToManyField(to='Author')
"""
authors是一个虚拟字段 主要是用来告诉orm 书籍表和作者表是多对多关系
让orm自动帮你创建第三张关系表
"""


class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=32)


class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
"""
作者与作者详情是一对一的关系 外键字段建在任意一方都可以 但是推荐你建在查询频率较高的表中
"""
author_detail = models.OneToOneField(to='AuthorDetail')
"""
OneToOneField也会自动给字段加_id后缀
所以你也不要自作聪明的自己加_id
"""

class AuthorDetail(models.Model):
phone = models.BigIntegerField() # 或者直接字符类型
addr = models.CharField(max_length=32)


"""
orm中如何定义三种关系
publish = models.ForeignKey(to='Publish') # 默认就是与出版社表的主键字段做外键关联

authors = models.ManyToManyField(to='Author')

author_detail = models.OneToOneField(to='AuthorDetail')


ForeignKey
OneToOneField
会自动在字段后面加_id后缀
"""

# 在django1.X版本中外键默认都是级联更新删除的
# 多对多的表关系可以有好几种创建方式 这里暂且先介绍一种
# 针对外键字段里面的其他参数 暂时不要考虑 如果感兴趣自己可以百度试试看

标签:关系,models,创建,外键,django,orm,max,id
From: https://www.cnblogs.com/97zs/p/17844823.html

相关文章

  • django orm对象关系映射
    orm不会帮你创建库只能创建到表的层面需要你自己提前创建好库"""#对象关系映射表 类记录 对象数据 对象属性/方法"""能够让一个不会sql语句的python程序员也能够简单快捷的操作数据库,极大的提升开发效率"""#去应用下的models.py中书写模型类 #类 模型类#表 模......
  • pycharm链接数据库 django链接MySQL
    #找到pycharmdatabase选项(三个地方查找)#选取对应的数据库下载对应的驱动"""明明链接上了数据库但是看不到表无法操作这个时候你只需要将刚刚创建的链接删除重新链接一次即可"""  #1.配置文件中配置DATABASES={'default':{'ENGINE':'django.db.back......
  • 为什么 Django 后台管理系统那么“丑”?
    哈喽大家好,我是咸鱼相信使用过Django的小伙伴都知道Django有一个默认的后台管理系统——DjangoAdmin它的UI很多年都没有发生过变化,现在看来显得有些“过时且简陋”那为什么Django的维护者却不去优化一下呢?原文作者去询问了多位维护者了解了其历史和”为什么这么设计......
  • day01 容器化的几种架构方式-pod创建过程原理-Scheduler的多种调度策略总结 (1.1-1.3
    一、容器化的几种架构方式1.、容器的由来及变迁史Docker->Docker-compose->Docerswarm->Kubernetes2、微服务容器化的几种解决方案特性DockerSwarm  Kubernetes安装和集群配置安装简单,集群不强大但在很复杂,集群非常强大图形用户界面没有官方图形界面,依托......
  • 比官网镜像小了1GB!微软媒体创建工具已支持下载Win11 23H2
    近日微软正式更新了媒体创建工具,现在用户可以通过该工具安装最新的Windows1123H2版本。微软前不久推出了Windows1123H2正式版本更新,不过当时并未更新媒体创建工具,依然停留在Windows1122H2版本,据微软表示其正在优化媒体创建工具以减少安装包体积。此次发布的新版本也没有辜......
  • 不同数据库创建用户,数据库的SQL语句整理
    不同数据库创建用户,数据库的SQL语句整理MySQLmysql-uroot-p#输入密码登录数据库CREATEDATABASEIFNOTEXISTSxxxdata_someinfoDEFAULTCHARSETutf8mb4;createuser'xxx_someinfo'@'%'identifiedby'Testsomepassword';grantallprivilegesonxxxda......
  • 请求扩展,蓝图 , flask-session,数据库连接池,wtforms ,flask-script,信号,flask-cache
    1请求扩展......
  • docker部署django项目
    docker部署django项目在你项目路径下:requirement.txt,Dockerfile,uwsgi.iniDockerfileFROMpython:3.6MAINTAINERtigerEXPOSE8080ADD./requirement.txt/home/RUNpipinstall-r/home/requirement.txt-ihttps://pypi.douban.com/simple/RUNpipinstalluwsgi-iht......
  • Orcal数据库的开始创建
      sqlplus/@courseassysdba;showcon_name; showpdbs;sqlplus/@orclassysdba;中有可插入数据库   altersessionsetcontainer=orclpdb;createuserscottidentifiedbytiger;grantconnect,resource,unlimitedtablespacetoscott; alterusers......
  • vue 创建项目流程
    1、首先在文件下打开cmd运行cd到你的目录下面2、npminitvue@latest命令创建项目默认都选否,具体需要,后面自行添加2、根据提示完成下三步操作这是运行npminstall由于卡住了,就需要进行下一步,手动打开刚刚的目录文件并且在该目录下,运行cmd,并输入,npmrundev来启动vu......