当前位置: 移动技术网 > IT编程>脚本编程>Python > Django之Mode的外键自关联和引用未定义的Model方法

Django之Mode的外键自关联和引用未定义的Model方法

2019年01月08日  | 移动技术网IT编程  | 我要评论

衣俊卿最新消息,风流妓男,做单在线阅读

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方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网