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数据分析之双色球中蓝红球分析统计示例
Feb 03 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
Python3+Appium安装使用教程
Jul 05 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
使用Python实现牛顿法求极值
Feb 10 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 Python
jupyter notebook tensorflow打印device信息实例
Apr 20 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
Dec 08 Python
numpy实现RNN原理实现
Mar 02 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
PHP中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
原生js实现对Ajax的封装(仿jquery)
2017/01/22 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
python进阶教程之词典、字典、dict
2014/08/29 Python
Python中实现参数类型检查的简单方法
2015/04/21 Python
详解Python的Django框架中的通用视图
2015/05/04 Python
python去掉 unicode 字符串前面的u方法
2018/10/21 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
什么是Python中的顺序表
2020/06/02 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
J2EE系统只能是基于web
2015/09/08 面试题
教师岗位职责范本
2013/12/29 职场文书
2014端午节活动策划方案
2014/01/27 职场文书
大学专科求职信
2014/07/02 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
人代会简报
2015/07/21 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
python playwrigh框架入门安装使用
2022/07/23 Python