Django之Mode的外键自关联和引用未定义的Model方法
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调用java的jar包方法
下一篇: python实现一组典型数据格式转换