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 typeclass User(models.Model):username = models.CharField(max_length = 20)department = models.ForeignKey(Department, related_name = 'users')

Django之Mode的外键自关联和引用未定义的Model相关推荐

  1. python自关联_Django之Mode的外键自关联和引用未定义的Model方法

    Django Model的外键自关联 在django的model定义中,有时需要某个Field引用当前定义的Model,比如一个部门(Department)的Model,它有一个字段是上级部门(sup ...

  2. 【Python】django模型models的外键关联使用

    [Python]django模型models的外键关联使用 Python 2.7.10,django 1.8.6 外键关联:http://www.bubuko.com/infodetail-61830 ...

  3. hibernate一对一外键单向关联

    与上篇相对应,还是client和address是一对一的外键关联关系,address表中的主键ID与client表中的外键CLIENTADDRESSID构成一对一外键关联关系. 表结构和sql语句就不 ...

  4. Hibernate 一对一外键单向关联

    [align=center][size=medium]Hibernate 一对一外键单向关联[/size][/align] 基于外键关联的单向一对一关联和单向多对一关联几乎是一样的.唯一的不同就是单向 ...

  5. Django学习手册 - ORM 外键

    Django 外键创建 关键语法: models.ForeignKey("UserGroup",to_field="gid",default=1,on_dele ...

  6. MySQL主外键表关联表数据的同时删除

    今天遇到这样的问题,用mysql数据库,删除主表的数据时,删除不了报错.原来是主外键的关联关系. 遇到的错误和解决方法如下: 问题解决后,我又从网上找到了一篇讲解非常优秀的博文,转载至此,作者原文地址 ...

  7. [django]list_display 中包含外键内的字段

    2019独角兽企业重金招聘Python工程师标准>>> class UserinfoAdmin(admin.ModelAdmin): list_display = ("le ...

  8. django外键和多数据库应用

    为什么80%的码农都做不了架构师?>>>    模型中如果有外键和多对多字段,创建的时候外键必须首先绑定,然后保存,才能添加多对多字段. from django.db import ...

  9. Mysql中的外键分析(什么是外键,为什么要用外键,添加外键,主外键关联删除)

    有一个东西一直在我脑海中是个很烦的东西,但是这东西不搞清楚会阻碍自己的前进.自己做项目demo永远只能用一张表... 所以今天还是学习了下外键希望能够搞明白一些... 百度上搜索外键的作用" ...

最新文章

  1. C++/C++11中std::deque的使用
  2. HDU-1452 因子和 积性函数性质
  3. 三星下一代手机芯片由AI来设计,EDA行业老大提供技术
  4. 例题:学习数据库查询。学生信息表的创建,主外键关系,以及45道题的查询实例。主要知识点在讲页45页,和讲页65页...
  5. 用Scikit-learn和TensorFlow进行机器学习(三)
  6. 破解百度翻译页面api参数加密
  7. textview文本超出部分用省略号表示
  8. StackExchange.Redis 官方文档(六) PipelinesMultiplexers
  9. linux账号密码登录,在自己的小linux上实现用户具有账号密码才可以登录
  10. php api 在线编辑导出,api在线管理,调试,文档生成工具之Apizza
  11. 谷歌手势插件--crxMouse Chrome™ 手势
  12. 万年历插件软件测试,万年历软件测试方案.docx
  13. 慕课网-前端课程学习完成
  14. TCP基于窗口的端到端的拥塞控制机制
  15. 过支付宝反Xposed登录检测
  16. vue开发APP使用微信分享和QQ分享功能
  17. 云计算实验2 Spark分布式内存计算框架配置及编程案例
  18. JVM 直接内存的使用与回收
  19. 上海宝山锦隆考试基地科目三笔记
  20. uCOS3源码解析视频教程-第4季第7部分-朱有鹏-专题视频课程

热门文章

  1. 阿里数据架构师多年心得:IT从业者必看的数据仓库知识点
  2. IT外包 OpenEIM 强调CMMI等级
  3. 【飞鸽传书】飞鸽传书2011绿色版
  4. 床位的摆放有五大禁忌
  5. 使用临界段实现优化的进程间同步对象-原理和实现
  6. 水滴石穿C语言之typedef的问题
  7. java中process方法用处_Java中ProcessBuilder应用实例
  8. 打印机乱码不停打印_关于东芝复合机连接打印,图文教你如何轻松连接至电脑...
  9. Circulation:吃鸡蛋量多,死亡风险增加?
  10. 这个大部分CNS都会用到的技术分析流程大放送......