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 自动安装 Rising 杀毒软件
Apr 24 Python
python多线程编程方式分析示例详解
Dec 06 Python
Python中的map()函数和reduce()函数的用法
Apr 27 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
Python数据结构之翻转链表
Feb 25 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
Sep 25 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
python文本数据处理学习笔记详解
Jun 17 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 Python
使用pandas模块实现数据的标准化操作
May 14 Python
Python 数据科学 Matplotlib图库详解
Jul 07 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学习之 循环结构实现代码
2011/06/09 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
php查询mysql数据库并将结果保存到数组的方法
2015/03/18 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
Prototype源码浅析 Enumerable部分之each方法
2012/01/16 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
实例详解vue中的$root和$parent
2019/04/29 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
用Python编写一个国际象棋AI程序
2014/11/28 Python
tensorflow入门之训练简单的神经网络方法
2018/02/26 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
印尼美容产品购物网站:PerfectBeauty.id
2017/12/01 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
神路信息Java面试题目
2013/03/31 面试题
生产部主管岗位职责
2014/01/06 职场文书
村委会贫困证明
2014/01/14 职场文书
村干部培训方案
2014/05/02 职场文书
民主生活会主持词
2015/07/01 职场文书