Django-ORM-多对多关系创建

技术文档网 2021-05-06

Django创建多对多外键关系表

  • 方法1:自定义多对多关系
    class Many_to_many(models.Model):
      f1 = models.ForeignKey(to='Table1', to_field='id')
      f2 = models.ForeignKey(to='Table2', to_field='id')
    
  • 方法2:利用Django自动创建多对多关系
    class Table1(models.Model):
      t1 = models.charField(max_length=32)
    class Table2(models.Model):
      t2 = models.CharField(max_length=64)
      f_key = models.ManyToManyField(to='Table1') #创建表时Django会自动创建第三张表来维护多对多关系,表名为Table2_f_key
    
  • 方法一更好一些,可以自己定制第三张表, 方法二无法直接操作第三张表
  • 方法二操作第三张表:
  • 添加记录:
    obj = models.Table2.objects.get(id=1) # 确定记录的Table2_id一列的值为1
    obj.f_key.add(2) # 表示往第三张表中添加一条记录,关联Table2的id为1和Table1的id为2的记录
    obj.f_key.add(*[1, 2, 3, 4]) # 表示添加 1-1, 1-2, 1-3, 1-4这样的四条记录
    
  • 删除记录:
    obj.f_key.remove(2) # 表示移除1-2这样的一条记录
    obj.f_key.remove(*[1,2,3,4]) # 表示移除类似的四条记录
    obj.f_key.clear() # 表示清除所有和这个对象相关联的记录
    
  • 修改记录:obj.f_key.set([3,5,7]) # 表示将跟1有关的记录替换为1-3, 1-5, 1-7, 数据库中和1有关的记录只剩下这些
  • 获取记录:obj.f_key.all() obj.f_key.filter() obj.f_key.filter()f.irst(), 注意,拿到的都是与之关联的表的对象,而不是第三张表的对象

相关文章

  1. Django基本命令

    Django基本命令 打开linux终端直接在终端中输入以下命令即可。 新建一个django project 命令:django-admin.py startproject project-nam

  2. 17个新手常见Python运行时错误

    17个新手常见Python运行时错误 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。 当初学 Python

  3. Python+SQLite真的有用吗?

    SQLite是个很简单的数据库,一个文件就可以搞定,存储上千万行的数据也没问题,图形界面程序有很多,管理很方便,用Python可以编程操作,也很简单,一切都似乎很完美。 我导入了几千万行的数据进SQL

  4. os各种各样的操作系统接口

    这个模块提供了一种使用操作系统相关功能的移动方式。如果您只想读取或写入一个文件,请查看open(),如果您想要操作路径,请参见操作os.path模块,如果您想要读取命令行上所有文件中的所有行,请参阅f

  5. 通过webpy和nginx-with-fastcgi搭建web.py

    这一节讲解的是如何使用Nginx和FastCGI搭建Web.py应用 环境依赖的软件包 Nginx 0.8.* or 0.7.* (需要包含fastcgi和rewrite模块)。 Webpy 0.3

随机推荐

  1. Django基本命令

    Django基本命令 打开linux终端直接在终端中输入以下命令即可。 新建一个django project 命令:django-admin.py startproject project-nam

  2. 17个新手常见Python运行时错误

    17个新手常见Python运行时错误 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。 当初学 Python

  3. Python+SQLite真的有用吗?

    SQLite是个很简单的数据库,一个文件就可以搞定,存储上千万行的数据也没问题,图形界面程序有很多,管理很方便,用Python可以编程操作,也很简单,一切都似乎很完美。 我导入了几千万行的数据进SQL

  4. os各种各样的操作系统接口

    这个模块提供了一种使用操作系统相关功能的移动方式。如果您只想读取或写入一个文件,请查看open(),如果您想要操作路径,请参见操作os.path模块,如果您想要读取命令行上所有文件中的所有行,请参阅f

  5. 通过webpy和nginx-with-fastcgi搭建web.py

    这一节讲解的是如何使用Nginx和FastCGI搭建Web.py应用 环境依赖的软件包 Nginx 0.8.* or 0.7.* (需要包含fastcgi和rewrite模块)。 Webpy 0.3