Django模型關系

在這里插入圖片描述

模型關系

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

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

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

  • 使用外鍵實現的
  • 主表獲取從表是隱性屬性,隱性屬性是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
    • 使用額外的關系表進行數據記錄
    • 關系表使用兩個外鍵實現的
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())

在這里插入圖片描述

模型級聯操作

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456279.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456279.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456279.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android常用開源項目

Android常用開源項目 Android 2014-05-23 16:39:43 發布您的評價: 4.3 收藏 24收藏Android開源項目第一篇——個性化控件(View)篇包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、其他Android開源項目第二篇——工具庫…

Django中數據知識點歸納

Django對象的增刪改查 我們為了對django對象的增刪改查進行總結,先在model.py文件中創建類便于舉例 定義學生: class Students(models.Model):snamemodels.CharField(max_length20)sgendermodels.BooleanField(defaultTrue)sagemodels.IntegerField()…

面 試 細 節 一 點 通

面談的禮節是社會新人及求職者踏人社會工作前最重要且最需學習的課題,因為這關系到是否能順利踏入社會且尋找到一份合適滿意的工作。 一個社會新人除了應注意的面試禮節外,在開始進行面談之前及面談結束之后,還有不少必須注意的禮儀。 面談時…

寬帶與流量的關系

流量,一般指的是每秒鐘流經某設備的數據的多少。也就是Byte/Second( 字節每秒)。 比方說1M,這個概念的單位叫bPS(bit Per Second)比特每秒。而事實上經常用另外一個詞來代替描述,也就是帶寬。 而帶寬和流量的換算關系是: 1 By…

PHP函數處理方法總結

call_user_func_array (PHP 4 > 4.0.4, PHP 5, PHP 7) call_user_func_array — 調用回調函數,并把一個數組參數作為回調函數的參數 說明 mixed call_user_func_array ( callable $callback , array $param_arr ) 把第一個參數作為回調函數(callback&…

Django刪除多對多表關系 :

刪除多對多表關系 : # 刪除子表與母表關聯關系,讓小虎不喜歡任何顏色 # 寫法1: child_obj Child.objects.get(name"apollo") colors_obj Colors.objects.all() child_obj.favor child_obj.save() # 寫法2: child_obj Child.objects.get(name"apo…

git push/pull時總需要輸入用戶名密碼的解決方案

在提交項目代碼或者拉代碼的時候,git會讓你輸入用戶名密碼,解決方案:(我們公司用的是gitlab)執行git config --global credential.helper store命令然后git push origin your-branch會讓你輸入用戶名和密碼&#xff0c…

Django源代碼寫DetailView與ListView

基于類的通用視圖 - 展平索引 通用顯示視圖 以下兩個通用的基于類的視圖旨在顯示數據。在許多項目中,它們通常是最常用的視圖。 一、DetailView django.views.generic.detail.DetailView 在執行此視圖時,self.object將包含視圖正在操作的對象。 此視圖…

開源商務智能軟件Pentaho

1 簡介Pentaho是世界上最流行的開源商務智能軟件,以工作流為核心的,強調面向解決方案而非工具組件的,基于java平臺的商業智能(Business Intelligence,BI)套件BI,之所以說是套件是因為它包括一個web server平臺和幾個工具軟件:報表…

chrome用type=file獲取圖片路徑并轉base64字符串

1 html頁面 <div class"col-sm-2" style"height: 200px;margin-top: 14px;"> <input id"photo" name" " type"file" value"選擇圖片" ng-model"photoUrl"> <input type"button&qu…

Python - Django - 中間件 process_exception

process_exception(self, request, exception) 函數有兩個參數&#xff0c;exception 是視圖函數異常產生的 Exception 對象 process_exception 函數的執行順序是按照 settings.py 中設置的中間件的順序的倒序執行 process_exception 函數只在視圖函數中出現異常的時候才執行…

NTV Media Server G3性能測試

Hello&#xff01;大家好&#xff0c;我是資深測試工程師Jackie&#xff0c;今天我來和大家一起對云視睿博的高性能流媒體服務器NTV Media Server G3做一次性能測試。今天測試有一個小目標&#xff0c;那就是驗證在一臺普通的PC機上&#xff0c;NTV Media Server G3的并發能力是…

人生不只是上坡路

從前的自己都是非常順利的&#xff0c;覺得自己有一天一定可以成就一番事業。 可是誰也預料不到這幾年的變化&#xff0c; 似乎人生就要跌落到了谷底&#xff0c; 不知道該如何去面對&#xff0c; 壓力很大、惶恐不安、不知道未來的路該如何去走。 人生不只是上坡路&#xff0c…

Django 時間與時區設置問題

Django 時間與時區設置問題 在Django的配置文件settings.py中&#xff0c;有兩個配置參數是跟時間與時區有關的&#xff0c;分別是TIME_ZONE和USE_TZ 如果USE_TZ設置為True時&#xff0c;Django會使用系統默認設置的時區&#xff0c;即America/Chicago&#xff0c;此時的TIME_…

Oracle+ASM單機環境下,開啟歸檔的最簡單的方法

在ASM單機環境下&#xff0c;開啟歸檔的最簡單的方法。環境&#xff1a;oracle11g 11.2.0.4 登陸sqlplus[oracleudevasm ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Thu Jun 8 18:20:41 2017Copyright (c) 1982, 2013, Oracle. All rights reserved…

【Python】 配置解析ConfigParser 命令行參數解析optparser

ConfigParser ConfigParser包裝了配置文件的讀取和寫入&#xff0c;使得python程序可以更加輕松操作配置文件了。這里的配置文件是指.ini的那種文件&#xff0c;基本格式如下 [section_a] a_key1 a_value1 a_key2 a_value2[section_b] b_key1 b_value1 b_key2 b_value2 b_k…

解決:build_attrs() takes at most 2 arguments (3 given)

1.這個原因是由于captcha版本安裝太低引起的&#xff0c;所以導致register頁面打開報錯 2.解決辦法就是安裝更高級版本的captcha 解決pip install django-simple-captcha0.5.5

docker registry v2與harbor的搭建

docker的倉庫 1 registry的安裝 docker的倉庫我們可以使用docker自帶的registry,安裝起來很簡單&#xff0c;但是可能有點使用起來不是很方便。沒有圖形化。 開始安裝 1 使用鏡像加速器 2 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://dc945b6d.m…

在windows下安裝Redis

一、下載windows版本的Redis 由于官網上沒有windows版的下載地址&#xff0c;所以需要下載windows版本的Redis有以下兩個地址&#xff1a; 博主的csdn資源地址&#xff1a;http://download.csdn.net/detail/u010608551/9778240 github下載地址&#xff1a;https://github.com/M…

Django REST framework【學習內容】

快速入門 我們將創建一個簡單的允許管理員用戶查看和編輯系統中的用戶和組的API。 項目設置 創建一個名為 tutorial 的新django項目&#xff0c;然后啟動一個名為 quickstart 的新app。 # 創建項目目錄 mkdir tutorial cd tutorial# 創建一個virtualenv來隔離我們本地的包依…