Django之Mode的外键自关联和引用未定义的Model方法


Posted in Python onDecember 15, 2018

Django Model的外键自关联

在django的model定义中,有时需要某个Field引用当前定义的Model,比如一个部门(Department)的Model,它有一个字段是上级部门(super_department),上级部门应该是一个外键并引用Model Department,即:

class Department(models.Model):
 
  '''
  some other filed
  '''
  super_department = models.ForeignKey(Department)

但是这样的定义对于python来说是不允许的,因为在定义Field super_department时,Department定义还未完成,python会提示你Department未定义,那么怎么办呢?放心吧,django已经为你考虑好这种情况了,只需要在定义时将ForeignKey所引用的Model改为‘self'即可,即:

class Department(models.Model):
  
  '''
  some other filed
  '''
  super_department = models.ForeignKey('self')

然后同步models至数据库时就会生成一个引用自己的外键。

Django Model之引用一个未定义的Model

有时在django的Model定义中,会出现引用一个未定义Model的情况,比如一个用户(User)属于某一个部门(Department),每一个部门有一个领导(leader),这个领导也是一个用户,即:

class Department(models.Model):
  
  name = models.CharField(max_length=20)
  leader = models.ForeignKey(User, related_name = 'lead_group', null = True)
 
class User(models.Model):
  
  username = models.CharField(max_length = 20)
  department = models.ForeignKey(Department, related_name = 'users')

但这么定义就会引发在Department定义时,Field leader引用User,但此时的User还未定义。有人会说,先定义User,再定义Department,那也会引发一样的问题,因为User的department引用Department,此时的Department一样未被定义。那么这时候怎么办呢?其实,只需要将ForeignKey引用的Model改为字符串即可,即:

class Department(models.Model):
  
  name = models.CharField(max_length=20)
  leader = models.ForeignKey('User', related_name = 'lead_group')#User now be str type
 
class User(models.Model):
  
  username = models.CharField(max_length = 20)
  department = models.ForeignKey(Department, related_name = 'users')

以上这篇Django之Mode的外键自关联和引用未定义的Model方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用setup.py安装python包和卸载python包的方法
Nov 27 Python
python发送邮件接收邮件示例分享
Jan 21 Python
Python中不同进制的语法及转换方法分析
Jul 27 Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
python3学习之Splash的安装与实例教程
Jul 09 Python
简单了解python代码优化小技巧
Jul 08 Python
python实现简单日志记录库glog的使用
Dec 13 Python
Python调用scp向服务器上传文件示例
Dec 22 Python
Python+OpenCV实现旋转文本校正方式
Jan 09 Python
Django扫码抽奖平台的配置过程详解
Jan 14 Python
python调用java的jar包方法
Dec 15 #Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 #Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 #Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 #Python
对python当中不在本路径的py文件的引用详解
Dec 15 #Python
对python3 中方法各种参数和返回值详解
Dec 15 #Python
对python中的argv和argc使用详解
Dec 15 #Python
You might like
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
joomla内置的表单验证功能使用方法
2010/06/11 PHP
PHP源代码数组统计count分析
2011/08/02 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
Javascript中构造函数要注意的一些坑
2017/01/23 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
vuex提交state&&实时监听state数据的改变方法
2018/09/16 Javascript
vue favicon设置以及动态修改favicon的方法
2018/12/21 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
jQuery实现轮播图源码
2019/10/23 jQuery
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
Cython 三分钟入门教程
2009/09/17 Python
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
浅谈flask源码之请求过程
2018/07/26 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
python中doctest库实例用法
2020/12/31 Python
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
美国电子元器件分销商:Newark element14
2018/01/13 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
安全教育心得体会
2013/12/29 职场文书
六查六看剖析材料
2014/02/15 职场文书
2014年国培研修感言
2014/03/09 职场文书
新学期决心书
2014/03/11 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
工厂见习报告范文
2014/10/31 职场文书
生日赠语
2015/06/23 职场文书
apache基于端口创建虚拟主机的示例
2021/04/22 Servers
oracle索引总结
2021/09/25 Oracle
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL
Elasticsearch 基本查询和组合查询
2022/04/19 Python