zoukankan      html  css  js  c++  java
  • 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")
  • 相关阅读:
    如何做一个按钮二个事件
    JavaScript中onmouseover时如何让鼠标指针变成一个小手状
    英语口语整理,灵活运用了,口语基本就没问题了
    javascript 传递 '' 时出错 换成 '&' ok
    一个按钮触发两个事件可以吗?
    Select中DISTINCT关键字的用法?
    使下拉框某项不可选的方法
    新打开窗口属性 a href
    调试和测试 Swing 代码
    打造专业外观九宫图
  • 原文地址:https://www.cnblogs.com/tangpg/p/9016296.html
Copyright © 2011-2022 走看看