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 相关文章推荐
跟老齐学Python之有容乃大的list(2)
Sep 15 Python
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
Python中使用装饰器来优化尾递归的示例
Jun 18 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
Python搭建Spark分布式集群环境
Jul 05 Python
django 单表操作实例详解
Jul 30 Python
python3实现mysql导出excel的方法
Jul 31 Python
Python如何存储数据到json文件
Mar 09 Python
Django import export实现数据库导入导出方式
Apr 03 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
header中Content-Disposition的作用与使用方法
2012/06/13 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
JS实现图片预加载无需等待
2012/12/21 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
angularjs中使用ng-bind-html和ng-include的实例
2017/04/28 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
python控制台英汉汉英电子词典
2020/04/23 Python
python简单实现基数排序算法
2015/05/16 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
应聘英语教师求职信
2014/04/24 职场文书
优秀教师演讲稿
2014/05/06 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
合作协议书范本
2014/10/25 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
租赁协议书
2015/01/27 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书