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 13 Python
Djang中静态文件配置方法
Jul 30 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
zookeeper python接口实例详解
Jan 18 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
Python操作Excel插入删除行的方法
Dec 10 Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 Python
django 自定义过滤器的实现
Feb 26 Python
python中图像通道分离与合并实例
Jan 17 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 Python
Python SMTP配置参数并发送邮件
Jun 16 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
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
详解PHP执行定时任务的实现思路
2015/12/21 PHP
php compact 通过变量创建数组
2016/11/15 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
img的onload的另类用法
2008/01/10 Javascript
js操作二级联动实现代码
2010/07/27 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
Python应用库大全总结
2018/05/30 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
NET程序员上机面试题
2015/05/23 面试题
营销总经理的岗位职责
2013/12/15 职场文书
中华美德颂演讲稿
2014/05/20 职场文书
宣传口号大全
2014/06/16 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
农村党支部承诺书
2015/04/30 职场文书
文明礼貌主题班会
2015/08/14 职场文书
创业计划书之面包店
2019/09/17 职场文书
PyTorch中的torch.cat简单介绍
2022/03/17 Python