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实现的简单猜数字游戏
Apr 04 Python
Python操作Word批量生成文章的方法
Jul 28 Python
Python中如何获取类属性的列表
Dec 26 Python
Python中int()函数的用法浅析
Oct 17 Python
python在ubuntu中的几种安装方法(小结)
Dec 08 Python
Python中交换两个元素的实现方法
Jun 29 Python
Python实现的多叉树寻找最短路径算法示例
Jul 30 Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
Python SMTP发送电子邮件的示例
Sep 23 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
Django如何与Ajax交互
Apr 29 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使用数组实现队列
2012/02/05 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
js防止页面被iframe调用的方法
2014/10/30 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
python远程登录代码
2008/04/29 Python
python代码制作configure文件示例
2014/07/28 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
python3爬虫之设计签名小程序
2018/06/19 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
2018/08/02 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
几款好用的python工具库(小结)
2020/10/20 Python
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
机械工程师岗位职责
2014/06/16 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
党支部审查意见
2015/06/02 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
python语言中pandas字符串分割str.split()函数
2022/08/05 Python