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 相关文章推荐
centos系统升级python 2.7.3
Jul 03 Python
python代码制作configure文件示例
Jul 28 Python
Python中的异常处理学习笔记
Jan 28 Python
Python简单实现TCP包发送十六进制数据的方法
Apr 16 Python
python WindowsError的错误代码详解
Jul 23 Python
python psutil库安装教程
Mar 19 Python
python实现转圈打印矩阵
Mar 02 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
Python 如何测试文件是否存在
Jul 31 Python
Python爬取网页信息的示例
Sep 24 Python
python如何做代码性能分析
Apr 26 Python
python 制作一个gui界面的翻译工具
May 14 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 mssql 时间格式问题
2009/01/13 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
JavaScript实现滑动导航栏效果
2017/08/30 Javascript
完美解决手机网页中输入框被输入法遮挡的问题
2017/12/19 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
2018/12/06 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
Python内置的HTTP协议服务器SimpleHTTPServer使用指南
2016/03/30 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
详解Python自建logging模块
2018/01/29 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
Python中常用的内置方法
2019/01/28 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
python中metaclass原理与用法详解
2019/06/25 Python
python实现代码统计程序
2019/09/19 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
Python爬虫如何应对Cloudflare邮箱加密
2020/06/24 Python
使用Python实现音频双通道分离
2020/12/25 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
凯特方迪化妆品官网:Kat Von D Beauty
2016/11/15 全球购物
买卖车协议书
2014/04/21 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书