1. 程式人生 > 程式設計 >django在開發中取消外來鍵約束的實現

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實現在開發中取消外來鍵約束就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。