日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django模型关系

發(fā)布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django模型关系 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模型關系

1:1 一對一 (一個身份證對應一個駕照)

  • 是使用外鍵+唯一約束實現(xiàn)的
  • 對應最多只能有一個
  • 我們通常會在從表中聲明關系
    • 主表,從表
  • 主表數據刪除,從表數據級聯(lián)刪除
  • 從表數據刪除,主表不受影響
  • 誰聲明關系,誰就是從表
driver_idcard = models.OneToOneField(IDCard,on_delete=models.PROTECT)
  • 主表獲取從表數據,是通過隱性屬性,隱性屬性的名字 默認是從表名字小寫
print(idcard.drivercard.driver_lever)
  • 從表獲取主表數據,是通過顯性屬性
print(dc.driver_idcard.id_name)

1:M(一個人對應多輛車)

  • 使用外鍵實現(xiàn)的
  • 主表獲取從表是隱性屬性,隱性屬性是Manager的子類
    • 支持
      • all
      • filter
      • first
      • last
  • 數據刪除和一對一一樣
- 從表獲取主表數據,是通過顯性屬性idcard = car.c_idcardprint(idcard.id_name- 主表獲取從表數據,是通過隱性屬性,隱性屬性的名字 默認是從表名字小寫idcard = IDCard.objects.last()cars = idcard.car_set.last()

實例

models.py

from django.db import models# Create your models here. class IDCard(models.Model):id_num = models.CharField(max_length=32,unique=True)id_name = models.CharField(max_length=32)class DriverCard(models.Model):diver_leverl = models.CharField(max_length=16)driver_idcard = models.OneToOneField(IDCard,on_delete=models.PROTECT)class Car(models.Model):c_type = models.CharField(max_length=32)c_idcard = models.ForeignKey(IDCard,null=True)

view.py

import random import uuidfrom django.http import HttpResponse from django.shortcuts import render# Create your views here. from RelationLearn.models import IDCard, DriverCard, Cardef index(request):return HttpResponse("three index")def add_idcard(request):id_card = IDCard()id_card.id_num = random.randrange(10000000000)id_card.id_name = uuid.uuid4().hexid_card.save()return HttpResponse("add new id card ok")def add_dc(request):dc = DriverCard()dc.diver_level = "c1"id_card = IDCard.objects.last()dc.driver_idcard =id_carddc.save()return HttpResponse("add killer ok")def delete_idcard(request):id_card = IDCard.objects.last()id_card.delete()return HttpResponse("del idcard ok")def del_dc(request):dc_card = DriverCard.objects.last()dc_card.delete()return HttpResponse("del dc ok")def get_idcard(request):dc= DriverCard.objects.last()print(dc.driver_idcard.id_name)return HttpResponse("by carid get id")def get_dc(request):idcard= IDCard.objects.last()print(idcard.drivercard.driver_lever)return HttpResponse("by id get carid")def get_idcard_form_car(request):car =Car.objects.last()idcard = car.c_idcardprint(idcard.id_name)return HttpResponse("by car gei id ")def get_car(request):idcard = IDCard.objects.last()cars = idcard.car_set.last()for car in cars:print(car)car_single = idcard.car_set.first()print(car_single.c_type)return HttpResponse("get cars by id")def add_car(request):# car = Car()# car.c_type = "tiganche"# idcard = IDCard.objects.last()# car.c_idcard = idcard# car.save()car = Car()car.c_type = "olddriver"car.save()idcard = IDCard.objects.last()idcard.car_set.add(car)return HttpResponse("add car ")
  • M:N
    • 使用額外的關系表進行數據記錄
    • 關系表使用兩個外鍵實現(xiàn)的
from django.db import models# Create your models here. class BlogUser(models.Model):u_name =models.CharField(max_length=32)class Blog(models.Model):b_title =models.CharField(max_length=64)b_content =models.TextField()b_user_collect =models.ManyToManyField(BlogUser)

views.py

from django.http import HttpResponse from django.shortcuts import render# Create your views here. from ManyLearn.models import *def index(request):return HttpResponse("index many")def add_collect(request):# blog = Blog.objects.last()# # blog= Blog()# user =BlogUser.objects.first()# blog.b_user_collect.add(user)# return HttpResponse("add collect")blog = Blog.objects.last()user = BlogUser.objects.last()user.blog_set.add(blog)return HttpResponse("add collect")def del_collects(request):blog = Blog.objects.all()user = BlogUser.objects.get(id = "3")user.blog_set.remove(*blog)return HttpResponse("del collects ok") # 查詢指定用戶的收藏的所有博客 def get_usercollects(request):user = BlogUser.objects.first()# print(user.blog_set.all().values())collections = user.blog_set.all()return render(request,"AllCollects.html",context=locals()) # 查詢指定博客被哪些用戶收藏了 def get_user(request):blog = Blog.objects.first()# blog=Blog()users = blog.b_user_collect.all()return render(request,"AllCollectsUser.html",context=locals())

模型級聯(lián)操作

  • CASECADE
    • 默認模式
    • 默認級聯(lián)刪除
  • PROTECT
    • 保護模式
    • 存在級聯(lián)數據就不能刪除
    • 不存在級聯(lián)數據就可以刪除
  • SET
    • 設置為某值
    • NULL
      • 字段允許為空
    • DEFAULT
      • 字段存在默認值
    • VALUE
      • VALUE是真實的值

總結

以上是生活随笔為你收集整理的Django模型关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。