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 = ( ( ...
随机推荐
- MegaCli命令使用详解
一.MegaCli命令介绍 MegaCli是一款管理维护硬件RAID软件,可以用来查看raid信息等MegaCli 的Media Error Count: 0 Other Error Count: 0 ...
- Ajxa用在哪些方面(六)
Ajax只有在适当的地方才会用到,也即需要在后台进行大量数据处理(充当消息通知机制),需要频繁的定时或不定时从服务器中读取数据的时候.1.比如我们常接触电子邮件系统中,因为电子邮件系统一般都由电子邮件 ...
- ubuntu下cmake编译opencv 3.4.3源码;
在进行编译前,准备工作: 1) 到opencv官网下载源码(https://opencv.org/releases.html): 2) 安装qt(http://download.qt.io/); ...
- shell脚本删除log日志
删除log文件简单shell脚本 经常会遇到日志把磁盘占满的情况,引起低级故障.我个人在实际工作中,尝试了如下的方法,比较简单,而且快捷有效. #!/bin/bash # /root/log_dele ...
- 开源实时消息推送系统 MPush
系统介绍 mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点.同时也是少有的 ...
- css 绝对定位实现水平垂直居中
负margin实现水平垂直居中 width: 500px; height: 500px; position: absolute; left: 50%; top :50%; margin-left: - ...
- bootstrap 在线设计工具layout IT
Layoutit! bootstrap 可视化布局BETA
- Python复习笔记(八)迭代器和生成器和协程
1. 迭代器 1.1 可迭代对象 判断xxx_obj是否可以迭代 在第1步成立的前提下,调用 iter 函数得到 xxx_obj 对象的 __iter__ 方法的返回值 __iter__ 方法的返回值 ...
- 《区块链生存训练2.0》PDF
<区块链生存训练>2.0于2018年2月28日在我的知识星球里发布.时过1年多,很多内容又过时了,准备修改新的版本,现在把PDF公布出来. 下载地址: 链接: https://pan.ba ...
- 细说java平台日志组件
1. java.util.logging JDK自带日志组件,使用方式简单,不需要依赖第三方日志组件.支持将日志打印到控制台,文件,甚至可以将日志通过网络打印到指定主机.相对于第三方独立日志框架来说, ...