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实现在开发中取消外键约束就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2020-05-19

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中的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 model反向关联名称的方法

如果你在 ForeignKey或 ManyToManyField字段上使用 related_name属性,你必须总是为该字段指定一个唯一的反向名称.但在抽象基类上这样做就会引发一个很严重的问题.因为 Django 会将基类字段添加到每个子类当中,而每个子类的字段属性值都完全相同 (这里面就包括related_name). 当你在(且仅在)抽象基类中使用 related_name 时,如果想绕过这个问题,名称中就要包含'%(app_label)s'和 '%(class)s'. '%(class)s

关于Django ForeignKey 反向查询中filter和_set的效率对比详解

前言 大家使用 Django 创建模型的时候一定会经常使用 ForeignKey 来创建两个表格之间多对一的外键关系,例如B中有一个 models.ForeignKey(A) .而当我们需要反向查询 A 中某个具体实例所关联的 B 时,可能会用到 A.B_set.all() 或 B.objects.filter(A) 这两种不同的方法. 不知道大家有没有也想过一个问题:当网站实际上线后,SEO强调页面加载速度,而当面对不断增大的请求量,这两种方法的哪一种速度更快? 馆主我产生了这个疑问,所以就打

解决Django删除migrations文件夹中的文件后出现的异常问题

migrate文件记录了每一次数据迁移的改变 解决方法:重建数据库 1.删除数据库 错误方法: python manage.py shell from app.models import *Product.objects.raw('drop database') 上面删除数据库的方法是错误的 正确方法: 如果是用默认的sqlite数据库:可以直接右键,将db.sqlite3删掉. 如果用的其他数据库,则进入数据库的控制台,将数据库删掉 2.删除migrations中的文件,只保留__init__

Python Web框架之Django框架Model基础详解

本文实例讲述了Python Web框架之Django框架Model基础.分享给大家供大家参考,具体如下: model是关于你的数据的单一的,确定的信息来源. 它包含您正在存储的数据的基本字段和行为.Django通过抽象化的模型层(models)为你的网络应用提供对于数据的结构化处理和操作处理,数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,使用数据库API对数据库进行增删改查的操作. 使用哪种数据库,只需要在se

在Django同1个页面中的多表单处理详解

快速上手Django实现项目 近期公司在做1个海淘的项目,APP为pylot.由于时间比较赶,加上隔壁那哥们不在,只能自己挑大梁了.结果,当项目做出来之后,被领导狠狠的批了一顿,说怎么用django写,你能解决Django的内存问题吗,你能解决并发的问题吗?Django那么重. 然后我只好回答说,正是因为它重,所以人家拿来写大型项目.虽然这里不是为了上面这2个问题的,而是来说下如何快速开发原型的问题. 对于Django这样基于模型的Web框架,实话说真的解决了很多繁琐的工作.由于它1个模型对应1

Django数据库表反向生成实例解析

本文我们研究下如何在django中反向生成mysql model代码,接下来我们看看具体介绍. 我们在展示django ORM反向生成之前,我们先说一下怎么样正向生成代码. 正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数据库如mysql中创建出符合model.py的表. 反向生成,指的是先在数据库中create table,然后通过django内置的编译器,生成model代码. 1.准备工作 创建django工程以及app 创建django工程,名字是hell

Django admin model 汉化显示文字的实现方法

1.将添加blog的后台基本操作 在blog文件夹下新建一个admin.py文件加入一下代码: from django.contrib import admin from djcms.apps.blog.models import Post, Category, Tag admin.site.register(Post) admin.site.register(Category) admin.site.register(Tag) 重启服务,再到浏览器上登录到后台,是不是增加了对blog的基本操作

django 解决manage.py migrate无效的问题

问题描述: 已有的model,修改之后,想重新建模,于是将migrations文件夹中除__init__.py之外其他文件都删掉,再次执行以下步骤python manage.py makemigrations确认成功,执行python manage.py migrate,提示No migrations to apply. 表示一脸懵逼.再次修改,指定表名,再次尝试,发现问题依旧,表示二脸懵逼 排查过程 python manage.py dbshell 进到数据库里面,查看是否表已存在 结果:表不

详解JavaScript正则表达式之分组匹配及反向引用

语法 元字符:(pattern) 作用:用于反复匹配的分组 属性$1~$9 如果它(们)存在,用于得到对应分组中匹配到的子串 \1或$1 用于匹配第一个分组中的内容 \2或$2 用于匹配第一个分组中的内容 ... \9或$9 用于匹配第一个分组中的内容 用法示例 var reg = /(A+)((B|C|D)+)(E+)/gi;//该正则表达式有4个分组 //对应关系 //RegExp.$1 <-> (A+) //RegExp.$2 <-> ((B|C|D)+) //RegExp.

Java正则环视和反向引用功能与用法详解

本文实例讲述了Java正则环视和反向引用功能与用法.分享给大家供大家参考,具体如下: 环视 1.环视概念 环视,又称为零宽断言,简称断言. 环视强调位置(前面或后面),必须匹配环视表达式,才能匹配成功. 环视可认为是虚拟加入到它所在位置的附加判断条件,并不消耗正则的匹配字符. 2.环视基础表达式 (?=Expression) 顺序肯定环视,表示所在位置右侧能够匹配Expression (?!Expression) 顺序否定环视,表示所在位置右侧不能匹配Expression (?<=Express