博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django-给外键关系传值,删除外键关系
阅读量:4554 次
发布时间:2019-06-08

本文共 2252 字,大约阅读时间需要 7 分钟。

反查:

  在表关系里 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是一个
list对象 通过反查取值需要all(),get(),filter之类的 for x in t: # 删除所有对应关系 haha... s.teacher.remove(x) return HttpResponse("ojbk")

 

posted on
2018-05-09 20:02 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/tangpg/p/9016296.html

你可能感兴趣的文章
LAMP环境安装
查看>>
git 添加add readme.txt 报fatal: pathspec 'readme.txt' did not match any files错误
查看>>
JS中 reduce() 的用法
查看>>
JS中的逻辑运算符&&、||,位运算符|,&
查看>>
vue-resource和axios区别
查看>>
Vue.js中 watch(深度监听)的最易懂的解释
查看>>
Three.js加载gltf模型
查看>>
js中的web加密
查看>>
关于各种文件用Editplus的方式打开出现“向程序发送命令时出现问题”的解决方法...
查看>>
[Codeforces261D]Maxim and Increasing Subsequence——树状数组+DP
查看>>
理解API和SDK的区别
查看>>
64. [Mcoi2018]终末之诗(上)
查看>>
关于进程的上下文切换
查看>>
你不知道的JS(作用域和闭包)
查看>>
[恢]hdu 1164
查看>>
vs2013 安装boost1.59
查看>>
[恢]hdu 2503
查看>>
调用动态库时声明的参数个数不一致导致的问题
查看>>
003 Python与类C语言的区别(未完)
查看>>
tomcat eclipse mysql 安装
查看>>