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 相关文章推荐
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
python打开文件并获取文件相关属性的方法
Apr 23 Python
Python的消息队列包SnakeMQ使用初探
Jun 29 Python
Python排序算法实例代码
Aug 10 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
Python生成器generator用法示例
Aug 10 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
详解Python的三种可变参数
May 08 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
django 解决扩展自带User表遇到的问题
May 14 Python
Python之字符串的遍历的4种方式
Dec 08 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/01/05 PHP
php函数与传递参数实例分析
2014/11/15 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
基于javascript实现最简单的选项卡切换效果
2016/05/16 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
Angular2 (RC4) 路由与导航详解
2016/09/21 Javascript
利用vue + element实现表格分页和前端搜索的方法
2017/12/25 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
如何通过python画loss曲线的方法
2019/06/26 Python
python__name__原理及用法详解
2019/11/02 Python
基于python中__add__函数的用法
2019/11/25 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
环境科学毕业生自荐信
2013/11/21 职场文书
简历的自荐信
2013/12/19 职场文书
元旦晚会邀请函
2014/02/01 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
年度评优评先方案
2014/06/03 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
校园广播稿100字
2014/10/06 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js