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基本语法经典教程
Mar 11 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
使用python进行拆分大文件的方法
Dec 10 Python
Python语言快速上手学习方法
Dec 14 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
Python opencv实现人眼/人脸识别以及实时打码处理
Apr 29 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
Python接口自动化测试的实现
Aug 28 Python
python 基于opencv 绘制图像轮廓
Dec 11 Python
tensorflow2.0教程之Keras快速入门
Feb 20 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/10/09 PHP
可以在线执行PHP代码包装修正版
2008/03/15 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
2017/02/17 PHP
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
elementui的默认样式修改方法
2018/02/23 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
详解Python的Lambda函数与排序
2016/10/25 Python
django序列化serializers过程解析
2019/12/14 Python
python实现梯度法 python最速下降法
2020/03/24 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
高考升学宴答谢词
2015/01/20 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
公司借款担保书
2015/09/22 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
干部理论学习心得体会
2016/01/21 职场文书
vue使用watch监听属性变化
2022/04/30 Vue.js