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实现baidu hi自动登录的代码
Feb 10 Python
wxPython学习之主框架实例
Sep 28 Python
Python的函数的一些高阶特性
Apr 27 Python
Python使用自带的ConfigParser模块读写ini配置文件
Jun 26 Python
简单了解Django模板的使用
Dec 20 Python
python os.path模块常用方法实例详解
Sep 16 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
python的set处理二维数组转一维数组的方法示例
May 31 Python
python3实现从kafka获取数据,并解析为json格式,写入到mysql中
Dec 23 Python
Docker部署Python爬虫项目的方法步骤
Jan 19 Python
python中sklearn的pipeline模块实例详解
May 21 Python
Python运算符+与+=的方法实例
Feb 18 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/07/22 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
PHP中的use关键字概述
2014/07/23 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
jquery ready()的几种实现方法小结
2010/06/18 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
jQuery基础知识小结
2014/12/22 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
vue+flask实现视频合成功能(拖拽上传)
2021/03/04 Vue.js
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
Python中super关键字用法实例分析
2015/05/28 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
Python3利用print输出带颜色的彩色字体示例代码
2019/04/08 Python
python代码 FTP备份交换机配置脚本实例解析
2019/08/01 Python
Python 如何在字符串中插入变量
2020/08/01 Python
几个SQL的面试题
2014/03/08 面试题
竞选班长演讲稿
2013/12/30 职场文书
英语道歉信范文
2014/01/09 职场文书
2016新年慰问信范文
2015/03/25 职场文书
2015双创工作总结
2015/07/24 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
医德医风学习心得体会
2016/01/25 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
Mysql关于数据库是否应该使用外键约束详解说明
2021/10/24 MySQL