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练习程序批量修改文件名
Jan 16 Python
PHP魔术方法__ISSET、__UNSET使用实例
Nov 25 Python
python调用百度地图WEB服务API获取地点对应坐标值
Jan 16 Python
python对矩阵进行转置的2种处理方法
Jul 17 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
pytorch进行上采样的种类实例
Feb 18 Python
Python实现对adb命令封装
Mar 06 Python
Python新手学习装饰器
Jun 04 Python
Python文件操作及内置函数flush原理解析
Oct 13 Python
详解Java中一维、二维数组在内存中的结构
Feb 11 Python
pytorch实现线性回归以及多元回归
Apr 11 Python
python+pyhyper实现识别图片中的车牌号思路详解
Dec 24 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
Linux环境下搭建php开发环境的操作步骤
2013/06/17 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
PHP7新特性
2021/03/09 PHP
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
javascript的事件触发器介绍的实现
2014/06/05 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
浅谈react 同构之样式直出
2017/11/07 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
浅谈Vue.js组件(二)
2019/04/09 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
python中for语句简单遍历数据的方法
2015/05/07 Python
windows下ipython的安装与使用详解
2016/10/20 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
html5录音功能实战示例
2019/03/25 HTML / CSS
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
2014年应届大学生自我评价
2014/01/09 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
分家协议书范本
2016/03/22 职场文书