Django:ORM中ForeignKey外键关系分析
假设有两张表,Role和User,因为多个用户会对应一个角色,属于多对一关系,所以User中的rolename字段使用ForeignKey,第一个参数为要关联的表Role,第二个参数related_name是用来反查这个角色下有几个用户时用的。
class Role(models.Model):
'''
角色表
'''
role_name = models.CharField(max_length=50)
create_time = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=10) def __str__(self):
return self.role_name class User(models.Model):
'''
用户信息表,用户表中role_name字段为ForeignKey意思为外键,代表多对一关系,多个用户对应一个角色
''' gender = (
('male', '男'),
('female', '女')
)
member_code = models.CharField(max_length=20, unique=True)
name = models.CharField(max_length=30)
password = models.CharField(max_length=256)
role_name = models.ForeignKey(Role, related_name='member_role', default=3)
email = models.EmailField(max_length=50)
sex = models.CharField(max_length=10, choices=gender, default='男')
create_time = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=10, default=1) def __str__(self):
return self.name

注意:
虽然User表中字段名称叫role_name,但是由于它是外键,所以它在实际的表中字段名会自动加上_id叫role_name_id,字段的值为Role表中的主键id的值
需求:
获取某个人对应的角色信息
代码:获取membe_code为01010101的用户对应的角色名称
from account.models import User def user():
user = User.objects.get(member_code='')
print user.role_name.role_name user()
疑问:
这里为什么要用user.role_name.role_name方式呢?
解答:
因为user.role_name,返回的是Role对象,所以需要再次.role_name获取对应的角色名称,同样想获得该角色的创建时间可以user.role_name.create_time
但是因为Role模型有对象可读性代码
def __str__(self):
return self.role_name
所以其实可以直接user.role_name直接获取该用户所属角色,但是不建议这样使用,尤其是后台处理数据后需要序列化,但是user.role_name返回的是一个对象序列化时会报错;
还是先获取对应主表对象,再获取主表对象具体的字段值。
Django:ORM中ForeignKey外键关系分析的更多相关文章
- django开发中关于外键设置
django开发中关于外键设置 我们建模型的时候会用到ForeignKey 而由于外键的约数会导致一些保存 所有我们ctrl+左键进入源码 源码 def __init__(self, to, on_d ...
- 通过SQL脚本来查询SQLServer 中主外键关系
在SQLServer中主外键是什么,以及主外键如何创建,在这里就不说了,不懂的可以点击这里,这篇文章也是博客园的博友写的,我觉得总结的很好: 此篇文章主要介绍通过SQL脚本来查看Sqlserver中主 ...
- mysql中主外键关系
一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...
- mysql|中主外键关系(转)
http://my.oschina.net/liting/blog/356150 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标 ...
- 多重外键关系在java中的处理方案
// 0){ var ul = li.getElementsByTagName("ul")[0]; ul.style.display = "none"; var ...
- 《JavaWeb从入门到改行》多重外键关系在java中的处理方案
目录:(点击红色方框展开子目录) 问题描述 无 项目案例说明 业务描述 数据库说明 项目源码及下载 无 问题描述 如上两图,数据库中各个表之间有很多的外键关系,其中业务关系是一个用户下有该用户的订单, ...
- 【转】PowerDesigner删除外键关系,而不删除外键列
原文:https://blog.csdn.net/tomsyc/article/details/6075530 PowerDesigner中配置外键关系时,如果要删除配置的外键关系,默认设置会一同删除 ...
- PowerDesigner删除外键关系,而不删除外键列[转]
PowerDesigner中配置外键关系时,如果要删除配置的外键关系,默认设置会一同删除外键列. 要更改此设置,需在菜单栏tools中打开Model Options,在Model Settings中点 ...
- PowerDesigner删除外键关系,而不删除外键列[转] 及编码格式
PowerDesigner删除外键关系,而不删除外键列[转] 数据库 database -> generate database ->format 设置为utf-8 PowerDesi ...
随机推荐
- Web API系列(四) 使用ActionFilterAttribute 记录 WebApi Action 请求和返回结果记录
转自:https://www.cnblogs.com/hnsongbiao/p/7039666.html 需要demo在github中下载: https://github.com/shan333cha ...
- Poj 3233 Matrix Power Series(矩阵乘法)
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Description Given a n × n matrix A and ...
- python时间序列数据的对齐和数据库的分批查询
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 0. 前言 在机器学习里,我们对时间序列数据做预处理的时候,经常会碰到一个问题:有多个时间序列存在多个表里,每个表的的时间轴不完全相同,要如 ...
- Launch4j:An error occurred while starting the application.解决方案
长期使用Processing 2.X进行开发,突然有一天Processing 1.5.1打不开了,报错如下: 按[确定]后窗口消失,但是任务管理器中的“javaw.exe”并没有消失..... 试过各 ...
- 力扣50题 Pow(x,n)
本题是力扣网第50题. 实现 pow(x, n) ,即计算 x 的 n 次幂函数. 采用递归和非递归思路python实现. class Solution: #递归思路 def myPow_recurs ...
- git的实际工作经验总结
分支工作的一个较佳的实践, 即git工作的最佳实践 从最初的svn到后来的git,上来给我的感觉就是git更方便, 可以在本地进行版本的提交,回退. 后来对hash有所了解, 知道了git的每个版本其 ...
- android studio 使用第三方模拟器连接方法
安装完模拟器后,要使用adb命令Android studio才能识别出来: 打开cmd,输入:adb connect 127.0.0.1:26944.如下: 海马玩模拟器的端口号是26944. 逍遥安 ...
- redis主从复制读写分离
主从复制,读写分离 Master/Slave 是什么 master写入 slave读取 能干嘛 读写分离,更加安全,性能提升 怎么玩 一主二仆.薪火相传.反客为主 周明老师,能够把长篇大论总结的很精辟 ...
- Django连接MySQL(二)
1.首先我们需要创建好项目 2.安装MySQL数据库 3.setting中修改database设置 DATABASES = { 'default': { 'ENGINE': 'django.db.ba ...
- URLEncoder.encode 使用心得
1.解决接口GET请求中:参数包含中文问题? 通过URLEncoder.encode 可以解决.我此次使用的utf-8编码,所以对中文进行urlencode 编码 而在服务器短 使用的tomcat ...