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 外键的更多相关文章

  1. Django学习手册 - ORM 数据创建/表操作 汇总

    ORM 查询的数据类型: QuerySet与惰性机制(可以看作是一个列表) 所谓惰性机制:表名.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它 ...

  2. python django中的orm外键级联删除

    今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: ...

  3. django 学习手册 - ORM 报错集(随时更新)

    报错问题: 问题一:(1050代码) django.db.utils.InternalError: (1050, "Table 'app01_group' already exists&qu ...

  4. Django学习手册 - ORM 多对多表

    定义表结构: class Host(models.Model): hostname = models.CharField(max_length=32) port = models.IntegerFie ...

  5. Django学习手册 - ORM数据类型

    DOM 字段/参数 配置格式: Module.字段(参数) 常用的字段归纳: 数字 models.AutoField() 自增列(int),必须设置为主键 models.IntegerField() ...

  6. Django学习手册 - ORM sqlit基础数据库操作

    步骤阐述:( splitDB 是Django自带的一个数据库) 1.在APP01 中的 models.py 配置DB信息  userinfo 相当于数据表的表名,而 uname.pwd 相当于 表中的 ...

  7. Django学习手册 - ORM - ImageField数据类型

    前置步骤 setting.py文件配置: 添加app目录 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'djan ...

  8. Django学习手册 - ORM 单表数据获取

    Django 单表数据的获取: 先建立数据表格 from django.db import models # Create your models here. class userinfo(model ...

  9. Django学习手册 - ORM choice字段 如何在页面上显示值

    在module操作过程中使用choice字段: 核心: obj.get_字段名_display 定义module 数据结构: class msg(models.Model): choice = ( ( ...

随机推荐

  1. Game1---游戏设计

    自己玩的一些游戏简单策划 先设计3个类似的游戏场景,第一个场景只进行时间限制,第二个场景道具进行上下移动,第三个场景随机生成敌人: 1.上面的台阶道具应该是随着人物的高度上升逐渐生成,逐渐呈现在玩家的 ...

  2. nginx 配置两个域名

    1.首先第一步安装: 参考:https://www.cnblogs.com/wyd168/p/6636529.html 启动: /usr/local/nginx/sbin/nginx -c /usr/ ...

  3. 关于处理iis8.0中设置Request.BinaryRead 不允许操作的解决方法

    iis6.0解决方案: 起初我刚开始上传的是小文件运行都是正常的,后来我弄个文件大点的上传看程序运行怎么样?就上面的问题,在网上搜索正好找到跟我一样的问题,拿过来自己记录下.其中行62指的是:oUpF ...

  4. mysql体系结构和sql查询执行过程简析

    一: mysql体系结构 1)Connectors 不同语言与 SQL 的交互 2)Management Serveices & Utilities 系统管理和控制工具 备份和恢复的安全性,复 ...

  5. IO以及file的一些基本方法

    IO定义:将内存的数据 持久化到设备上 这个动作称为输出 写 Output操作 把硬盘上的数据读取到内存 这个动作称为输入 读 Input 把上面这两种操作称为IO操作 File类的静态成员变量:pa ...

  6. 【Mac进销存管理软件】Daily Sales Pro Mac

        [简介] Daily Sales Mac版是Mac平台上的一款进销存软件,库存管理系统.Daily Sales Mac版是一款易于使用的进出库存管理软件,让您及时了解库存状况.销售收入.采购成 ...

  7. JAVA核心技术I---JAVA基础知识(package和import)

    一:package 所有的Java类都是放置在同一个目录下面的,因此类之间的相互调用无需显式声明调用. –同一个目录下,两个类的名字不能相同 –文件过多,查找和修改都不易,且容易出 Java支持多个目 ...

  8. Redis之RDB与AOF 笔记

    AOF定义:以日志的形式记录每个操作,将Redis执行过的所有指令全部记录下来(读操作不记录),只许追加文件但不可以修改文件,Redis启动时会读取AOF配置文件重构数据 换句话说,就是Redis重启 ...

  9. plus初始化原理及plus is not defined,mui is not defined 错误汇总

    原文 关于plus是哪里来的问题 plus是5+Runtime的内部对象.就像chrome浏览器里有chrome.开头的一些对象方法,5+runtime内部内置了plus对象.因为plus和mui不一 ...

  10. golang etcdclientv3使用说明

    clientv3.New() 创建连接 config = ec.Config{ Endpoints: []string{"10.0.0.5:2379"}, //连接的etcd集群地 ...