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

作者:doggy_coder 时间:2023-09-04 13:34:40 

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')

来源:https://blog.csdn.net/ranyixu11/article/details/76381631

标签:Django,Mode
0
投稿

猜你喜欢

  • 简析Oracle数据库常见问题及解决方案

    2024-01-24 11:15:01
  • asp下过滤非法的SQL字符的函数代码

    2011-03-03 11:23:00
  • Python中的类型提示(Type Hints)总结

    2023-12-24 02:26:46
  • python判断变量是否为int、字符串、列表、元组、字典的方法详解

    2022-09-28 05:11:57
  • Golang使用ini库读取配置详情

    2023-07-02 07:46:56
  • python实现双人五子棋(终端版)

    2022-08-26 14:28:57
  • MySQL十条特殊技巧

    2007-09-17 12:33:00
  • python 视频下载神器(you-get)的具体使用

    2023-03-18 19:30:58
  • Go语言的type func()用法详解

    2024-02-21 12:50:51
  • 查找MySQL线程中死锁的ID的方法

    2024-01-12 18:28:34
  • oracle中110个常用函数介绍

    2023-07-09 03:46:20
  • MYSQL中Truncate的用法详解

    2024-01-17 12:00:09
  • 记得使用try+catch

    2010-01-29 12:48:00
  • Oracle数据库的备份与恢复

    2010-07-28 12:52:00
  • MySQL下载安装详情图文教程

    2024-01-24 15:48:48
  • Scrapy抓取京东商品、豆瓣电影及代码分享

    2022-03-23 18:44:47
  • Python 的可变和不可变对象详情

    2021-11-24 22:28:33
  • Python中字典和JSON互转操作实例

    2023-03-12 14:18:11
  • 使用组件来保护你的ASP代码

    2008-06-03 13:47:00
  • python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法

    2023-05-25 23:48:29
  • asp之家 网络编程 m.aspxhome.com