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 = ( ( ...
随机推荐
- ElasticSearch6.5.0 【安装IK分词器】
不得不夸奖一下ES的周边资源,比如这个IK分词器,紧跟ES的版本,卢本伟牛逼!另外ES更新太快了吧,几乎不到半个月一个小版本就发布了!!目前已经发了6.5.2,估计我还没怎么玩就到7.0了. 下载 分 ...
- Idea + Git + GitLab 使用
首先去下载Git,https://git-scm.com/ 安装好之后,打开Idea--->Settings,,,设置Git路径,然后点击Test按钮 然后是GitLab,一般企业内部开发都会有 ...
- ES6---扩展运算符和rest‘...’(三点运算符),在数组、函数、set/map等中的应用
ES6新增的三点运算符,是由三个点表示,在数组中扮演着重要的角色,可以对数组进行合并与分解.可以对set等数据结构进行转换.可以对函数参数进行简化表示,接下来,我们一起揭开其神秘面纱… ●三点—res ...
- POJ 3352 Road Construction ; POJ 3177 Redundant Paths (双联通)
这两题好像是一样的,就是3177要去掉重边. 但是为什么要去重边呢??????我认为如果有重边的话,应该也要考虑在内才是. 这两题我用了求割边,在去掉割边,用DFS缩点. 有大神说用Tarjan,不过 ...
- Android Studio项目引入外部库注意事项(zxing)
1.复制到app同级目录下,zxing: 2.在项目根目录下的settings.gradle下添加第三方库目录 4.在app/build.gradle下添加编译依赖 compile project(p ...
- ELK大流量日志分析系统搭建
1.首先说下EKL到底是什么吧? ELK是Elasticsearch(相当于仓库).Logstash(相当于旷工,挖矿即采集数据).Kibana(将采集的数据展示出来)的简称,这三者是核心套件,但并非 ...
- 关键字(3):order by/group by/having/where/sum/count(*)...查询结果筛选关键字
ORDER BY <属性表> 只要在WHERE子句的选择条件后面加上如下子句:ORDER BY <属性表> 就可以实现输出的排序,默认的顺序为升序(ASC).可以在属性的后面加 ...
- awk统计文件大小
在Linux系统中,经常会遇到某个目录下文件很多,要统计这些文件的空间大小.可以采用awk来实现.如下是实现这个功能的例子. vim sum.sh #!/bin/bash# sum.shcd //ba ...
- 使用mutt自动发送邮件
1.Mutt安装及环境配置 1.1.安装 sudo yum install mutt 比如你要设置邮件的发信人,需要做: sudo vim /etc/Muttrc set envelope_from= ...
- Python3 图片转字符画
https://www.shiyanlou.com/courses/370/labs/1191/document from PIL import Image import argparse ascii ...