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计算圆周长、面积、球体体积并画出圆
Apr 08 Python
利用Python绘制数据的瀑布图的教程
Apr 07 Python
Python中的模块和包概念介绍
Apr 13 Python
Python的shutil模块中文件的复制操作函数详解
Jul 05 Python
Python3多线程操作简单示例
May 22 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
Feb 20 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
提升python处理速度原理及方法实例
Dec 25 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
Feb 05 Python
python 命名规范知识点汇总
Feb 14 Python
Python+redis通过限流保护高并发系统
Apr 15 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自定义函数收代码
2010/08/01 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
php中把美国时间转为北京时间的自定义函数分享
2014/07/28 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
php操作mongodb封装类与用法实例
2018/09/01 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
javascript实现当前页导航激活的方法
2015/02/27 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
Js类的静态方法与实例方法区分及jQuery拓展的两种方法
2016/06/03 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
vue实现tab栏点击高亮效果
2020/08/19 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
Python 的 with 语句详解
2014/06/13 Python
Python装饰器用法实例总结
2018/02/07 Python
对Python 内建函数和保留字详解
2018/10/15 Python
python文本数据处理学习笔记详解
2019/06/17 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
2020/03/16 Python
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
医科大学毕业生自荐信
2014/02/03 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
《小小雨点》教学反思
2014/02/18 职场文书
灰雀教学反思
2014/04/28 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
2014年小班保育员工作总结
2014/12/23 职场文书
学前班学生评语
2014/12/29 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
岗位聘任协议书
2015/09/21 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
python urllib库的使用详解
2021/04/13 Python
Python列表的索引与切片
2022/04/07 Python