django在开发中取消外键约束的实现

我就废话不多说了,大家还是直接看代码吧!

# 在setting设置外键
'OPTIONS': {
   "init_command": "SET foreign_key_checks = 0;",
  }

补充知识:django-给外键关系传值,删除外键关系

反查:

在表关系里 related_name = '反查name',自己不设置,django也会默认设置为class的小写名字+_set , ex: book_set.

一对一关系赋值:

class ModelStudy(View):
 ''' ClassRoom和ClassNumber是一对一关系,给外键传值 '''
 def get(self, request):
  ''' 两种方法 教室ClassRoom和教室编号ClassNumber 外键字段在django类里名(room_number)在数据库名(room_number_id) '''
     # 一.1赋值对象给外键字段
  # room_number = ClassNumber.objects.filter(class_number__exact='003')[0] # d对List切片
  # c = ClassRoom()
  # c.room_number = room_number
  # c.save()
  # 1.2新增数据并赋值对象给新增字段
  room_number = ClassNumber.objects.filter(class_number__exact='003')[0]
  print room_number
  ClassRoom.objects.create(name="python教室", room_number=room_number) # 新增数据

     # 二:获取外键字段(数据库的外键字段名字room_number_id)的值,将相对应的值直接赋值给该外键字段
     class_number = ClassNumber.object.get("id=1").room_number # 获取教室编号具体值 ‘001'
     c = ClassRoom.object.filter(id=1)[0]
     c.room_number_id = class_number # 将‘001'复制给数据库外键字段 外键字段在django类里名(room_number)在数据库名(room_number_id)
     c.save()
return HttpResponse("ojbk")

多对一:

类似一对一,只是 ''多''的一方可以对应多个"一"方。 ps: "一"放通过反查,会有不止一条数据。可以通过+all()获取。

假设两张表:Book书 + Reply评论 表。为多对一,Reply为"多''. 那么"一",Book反查是,Book.object.get(id=1).reply_set.all() # reply_set是不设置related_name时,django自己设置的

多对多:

class ModelStudy(View):
 ''' Students和Teachers是多对多关系 '''
 def get(self, request):
  ''' 两种情况 '''
  # 主类(外键所在类)数据已经存在
  # t = Teachers.objects.get(id=1)
  # s = Students.objects.get(name="学生3")
  # s.teacher.add(t) # 多对多需要add数据
  # s.save()

  # 主类数据不存在,新增数据时, 需先save()
  t = Teachers.objects.get(id=1)
  s = Students(name='xiaodong1', age=10, gender="男")
  s.save() # 先存新增数据
  s.teacher.add(t) # 再给新增数据添加多对多关系   可以add(t, t1, t2)多个对应的关系
  s.save()
  return HttpResponse("ojbk")

删除关系数据

先查出对应的关系数据,在删除

class ModelStudy(View):
 ''' Students和Teachers是多对多关系 '''
 def get(self, request):
  ''' 两种情况 '''
  s = Students.objects.get(id=1)
  t = s.teacher.all() # 多对多 s.teacher是一个<QuerySet>list对象 通过反查取值需要all(),get(),filter之类的
  for x in t: # 删除所有对应关系 haha...
   s.teacher.remove(x)
  return HttpResponse("ojbk")

以上这篇django实现在开发中取消外键约束就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Django中的AutoField字段使用

    [Django是一个机智的框架] 默认情况下Djang会为ORM中定义的每一张表加上一个自增ID列,并且用这个列来做主键:出于一个MySQL-DBA的工作经历我觉得 Djanog还真是机智:这样么说主要是因为我遇到过许多主从延时的问题,有些比较过分的会延时好几周,通常这些都是因为binlog格式 为"ROW"但是表上不存在主键引起的. 如果当前网站用的是Django开发的,我想就不会有这种事情发生了吧. [AutoField] Django默认的行为就像这样 class TestMod

  • Django 解决model 反向引用中的related_name问题

    问题: 定义表Apple: class Apple( models.Model): origin_level = models.ForeignKey(AppleLevel) new_level = models.ForeignKey(AppleLevel) 出现如下问题: monitor.apple: Accessor for field 'origin_level' clashes with related field 'AppleLevel.apple_set'. Add a related

  • django foreignkey(外键)的实现

    foreignkey是一种关联字段,将两张表进行关联的方式,我们在dodels.py里写入要生成的两张表: class Usergroup(models.Model): uid=models.AutoField(primary_key=True) caption=models.CharField(max_length=64,null=True) ctime=models.DateField(auto_now_add=True,null=True) uptime=models.DateField(

  • django在开发中取消外键约束的实现

    我就废话不多说了,大家还是直接看代码吧! # 在setting设置外键 'OPTIONS': { "init_command": "SET foreign_key_checks = 0;", } 补充知识:django-给外键关系传值,删除外键关系 反查: 在表关系里 related_name = '反查name',自己不设置,django也会默认设置为class的小写名字+_set , ex: book_set. 一对一关系赋值: class ModelStudy

  • laravel5.6中的外键约束示例

    场景 如果现在有两张表,一张表是文章表articles,一张表是分类表categories,其中在文章表中有一个分类字段category_id,现在想在删除分类表中的某一分类时,该分类下的所有文章也一起被删除,那么这时候就可以用到外键约束 具体用法如下: 给文章表添加外键约束 $table->unsignedInteger('category_id')->comment('文章所属分类|select'); $table->foreign('category_id')->refere

  • 详解MySQL中的外键约束问题

    使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器端脚本语言,就足以应付对MySQL表所需的各种操作了,尤其是当您使用了快速MyISAM数据库引擎的时候.但是,即使在最简单的情况下,事情也要比我们想象的要复杂得多.下面我们用一个典型的例子进行说明.假设您正在运行一个博客网站,您几乎天天更新,并且该站点允许访问者评论您的帖子. MySQL外键约束条件

  • 在Oracle数据库中添加外键约束的方法详解

    外键指定一个列(或一组列)的值必须符合另一个表的一些行的值.我们说这是维持关联表的参照完整性. 在图形化界面中,在 外键 选项卡,只需简单地点击外键栏位来编辑.使用外键的工具栏,能让你创建新的.编辑或删除选择的外键栏位. 添加外键:添加一个外键到表. 删除外键:删除已选择的外键. 使用 名 编辑框来输入新键的名. 使用 参考模式.参考表 和 参考限制 下拉列表来分别选择一个外部索引数据库.表及限制. 要包含栏位到键,只需简单地双击 栏位 栏位或点击  来打开编辑器进行编辑. 删除时 下拉列表定义

  • MySQL外键约束常见操作方法示例【查看、添加、修改、删除】

    本文实例讲述了MySQL外键约束常见操作方法.分享给大家供大家参考,具体如下: 1. 查看数据库表创建的sql语句 show create table vip 2. 查看外键的约束名 CREATE TABLE `vip` ( `id` int(11) NOT NULL AUTO_INCREMENT, `address` varchar(255) DEFAULT NULL, `code` varchar(255) DEFAULT NULL, `mobile` varchar(255) DEFAUL

  • MariaDB数据库的外键约束实例详解

    外键 外键的用途是确保数据的完整性.它通常包括以下几种: 1 实体完整性,确保每个实体是唯一的(通过主键来实施) 2 域完整性,确保属性值只从一套特定可选的集合里选择 3 关联完整性,确保每个外键或是NULL(如果允许的话)或含有与相关主键值相配的值 1.什么是外键约束 与主键约束不同,创建外键约束不会自动创建对应的索引. 但是由于以下原因,对外键手动创建索引通常是有用的: 当在查询中组合相关表中的数据时,经常在联接条件中使用外键列,方法是将一个表的外键约束中的一列或多列与另一个表中的主键列或唯

  • MySQL外键约束(FOREIGN KEY)案例讲解

    MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用.对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表). 外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性.比如,一个水果摊,只有苹果.桃子.李子.西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果.桃子.李子和西瓜,其它的水果都是不能购买的. 主表删除某条记录时,从表中与之对应的记录也必须有相应的改变.一个表

  • Django中ORM外键和表的关系详解

    外键 在 MySQL 中,表有两种引擎,一种是 InnoDB ,另外一种是 myisam .如果使用的是 InnoDB 引擎,是支持外键约束的.外键的存在使得 ORM 框架在处理表关系的时候异常的强大.因此这里我们首先来介绍下外键在 Django 中的使用. 类定义为 class ForeignKey(to,on_delete,**options) .第一个参数是引用的是哪个模型,第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有 CASCADE . SET_NULL 等.

  • PostgreSQL中enable、disable和validate外键约束的实例

    我就废话不多说了,大家还是直接看实例吧~ postgres=# create table t1(a int primary key,b text,c date); CREATE TABLE postgres=# create table t2(a int primary key,b int references t1(a),c text); CREATE TABLE postgres=# insert into t1 (a,b,c) values(1,'aa',now()); INSERT 0

  • Mysql关于数据库是否应该使用外键约束详解说明

    一.前言 对于[是否使用外键约束]这个话题已经是老生常谈的了.在学校中,老师交给我们的大多是需要我们建立外键约束,但进入了实际工作很多时候并不会使用外键,而是通过代码逻辑来控制.包括在阿里的JAVA规范中也明确规定:[强制]不得使用外键与级联,一切外键概念必须在应用层解决. 为什么要做这样的规定呢?到底该不该使用外键约束呢?我们可以举一个例子来说明 二.举例说明 现在我们在数据库中建立了两张表:[product和project],[project]的porduct字段,关联Product,他们之

随机推荐