Django学习手册 - ORM 外键
Django 外键创建
关键语法:
models.ForeignKey("UserGroup",to_field="gid",default=1,on_delete=models.CASCADE)
参数:
"UserGroup" #外键另外一张表
to_field="gid" #另外一张表的字段
on_delete=models.CASCADE #因为不加这个会报错相关(https://www.cnblogs.com/phyger/p/8035253.html)
创建数据表格:
from django.db import models # Create your models here. class userinfo(models.Model):
uname = models.CharField(max_length=32,db_column="用户名")
pwd = models.CharField(max_length=32,db_column="密码")
email = models.EmailField(null=True,db_column="邮箱")
usergroup = models.ForeignKey("UserGroup",to_field="gid",default=1,on_delete=models.CASCADE) class UserGroup(models.Model):
gid = models.AutoField(primary_key=True)
gname = models.CharField(max_length=32)
test = models.CharField(max_length=32,null=True)
g = models.ForeignKey("Group", to_field="id",null=True,on_delete=models.CASCADE) class Group(models.Model):
grouplist = models.CharField(max_length=255)
在每个字段中都录入数据:

usergroup表 外键 g_id

userinfo表 外键 usergroup_id

跨表查询:原理--(对象(对象(对象)))
obj2 = models.userinfo.objects.filter(uname="root").first()
print(obj2.usergroup.g.grouplist)
Django 外键 数据获取
定义表结构:
from django.db import models # Create your models here.
class userinfo(models.Model):
uname = models.CharField(max_length=255)
sex = models.CharField(max_length=12)
g = models.ForeignKey("usergroup",to_field="id",on_delete=models.CASCADE,default='') class usergroup(models.Model):
groupname = models.CharField(max_length=255)
外键 数据获取:
def index(request):
# #方式一,obj对象方式
# ss = models.userinfo.objects.filter(id=1)
#
# for i in ss :
# # print(i) 为一个OBJ 对象
# print(i.uname,i.sex,i.g_id,i.g.id,i.g.groupname) #方式二,字典方式
# ss2 = models.userinfo.objects.filter(id=1).values("id","uname","g__groupname")
# for i2 in ss2 :
# # print(i2) 为一个字典对象,根据key取值
# print(i2['id'],i2['uname'],i2['g__groupname']) # 方式三,元组方式
# ss2 = models.userinfo.objects.filter(id=1).values_list("id","uname","g__groupname")
# for i2 in ss2 :
# # print(i2) 为一个元组对象,根据索引取值
# print(i2[0],i2[1],i2[2]) #总结,在利用一对多的表查询时,字典和元组 方式不能直接用 “ . ”(点) 的方式直接取值,否则会直接报错。
#取值通过 双下划 线的方式取值。 return HttpResponse("OK")
外键创建新数据:
#外键 创建新数据条目:
models.userinfo.objects.create(
uname="小花",
sex="女",
g_id="3"
)
#添加一条数据,跨表添加时需引用外键的id,而不是外键对象
Django学习手册 - ORM 外键的更多相关文章
- Django学习手册 - ORM 数据创建/表操作 汇总
ORM 查询的数据类型: QuerySet与惰性机制(可以看作是一个列表) 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它 ...
- python django中的orm外键级联删除
今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: ...
- django 学习手册 - ORM 报错集(随时更新)
报错问题: 问题一:(1050代码) django.db.utils.InternalError: (1050, "Table 'app01_group' already exists&qu ...
- Django学习手册 - ORM 多对多表
定义表结构: class Host(models.Model): hostname = models.CharField(max_length=32) port = models.IntegerFie ...
- Django学习手册 - ORM数据类型
DOM 字段/参数 配置格式: Module.字段(参数) 常用的字段归纳: 数字 models.AutoField() 自增列(int),必须设置为主键 models.IntegerField() ...
- Django学习手册 - ORM sqlit基础数据库操作
步骤阐述:( splitDB 是Django自带的一个数据库) 1.在APP01 中的 models.py 配置DB信息 userinfo 相当于数据表的表名,而 uname.pwd 相当于 表中的 ...
- Django学习手册 - ORM - ImageField数据类型
前置步骤 setting.py文件配置: 添加app目录 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'djan ...
- Django学习手册 - ORM 单表数据获取
Django 单表数据的获取: 先建立数据表格 from django.db import models # Create your models here. class userinfo(model ...
- Django学习手册 - ORM choice字段 如何在页面上显示值
在module操作过程中使用choice字段: 核心: obj.get_字段名_display 定义module 数据结构: class msg(models.Model): choice = ( ( ...
随机推荐
- 函数:PHP将字符串从GBK转换为UTF8字符集iconv
1. iconv()介绍 iconv函数可以将一种已知的字符集文件转换成另一种已知的字符集文件.例如:从GB2312转换为UTF-8. iconv函数在php5中内置,GB字符集默认打开. 2. ic ...
- POJ 2112 Optimal Milking (Dinic + Floyd + 二分)
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 19456 Accepted: 6947 ...
- 温故知新 —— Floyd算法
什么?Floyd?sb O(n ^ 3) 算法早不用了,右上角红叉吧.我之前虽然也认识过 Floyd 算法的重要性,不过多少也是这么想的.然而最近三天连续 rand 到了好几道有关的题目,让我彻底重新 ...
- mysql性能分析工具
一.EXPALIN 在SQL语句之前加上EXPLAIN关键字就可以获取这条SQL语句执行的计划 那么返回的这些字段是什么呢? 我们先关心一下比较重要的几个字段: 1. select_type 查询类型 ...
- JavaSE_坚持读源码_ArrayList对象_Java1.7
底层的数组对象 /** * The array buffer into which the elements of the ArrayList are stored. * The capacity o ...
- mysql 遍历所有的库并根据表和sql语句备份
建库.用户语句 create database test_hb; create user ' test_hb'@'%' identified by '123456'; grant all privil ...
- I/O模型之二:Linux IO模式及 select、poll、epoll详解
目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I ...
- HDFS 概述
定义 HDFS(Hadoop Distributed File System)是分布式文件管理系统中的一种,用来管理多台机器上的文件,通过目录树来定位文件. 由很多服务器联合起来实现其功能,集群中的服 ...
- Docker 概述
Docker 是一个开源的应用容器引擎 ,让开发者可以打包他们的应用及依赖环境到一个可移植的容器中,然后发布到任何运行有Docker引擎的机器上. 让大家可以随心所欲地使用软件而又不会深陷到环境配置中 ...
- Web项目发布的更新
在项目发版后经常需要修改bug,解决出现的各种问题,对项目升级,这时候就需要将之前部署,上线的项目更新版本. 本文就简单说一下一些出现的关键点(不到之处欢迎指教) 1.使用idea,eclipse等工 ...