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监控网卡流量并使用graphite绘图的示例
Apr 27 Python
Python3.0与2.X版本的区别实例分析
Aug 25 Python
Python实现批量读取word中表格信息的方法
Jul 30 Python
浅析Python装饰器以及装饰器模式
May 28 Python
python的pandas工具包,保存.csv文件时不要表头的实例
Jun 14 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
May 27 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
Python列表删除元素del、pop()和remove()的区别小结
Sep 11 Python
python实现代码统计器
Sep 19 Python
python如何使用Redis构建分布式锁
Jan 16 Python
python生成随机数、随机字符、随机字符串
Apr 06 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世纪万年历
2006/12/06 PHP
php操作xml
2013/10/27 PHP
php实现的日历程序
2015/06/18 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
PHP函数func_num_args用法实例分析
2015/12/07 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
写给小白看的JavaScript异步
2017/11/29 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
2020/02/26 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
自学考试自我鉴定范文
2013/09/26 职场文书
实习生的自我评价
2014/01/08 职场文书
学校消防安全制度
2014/01/30 职场文书
工作鉴定评语
2014/05/04 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers