<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
常用的表關聯方式有三種:
一對一對映
如: 一個身份證對應一個人
一對多對映
如: 一個班級可以有多個學生
多對多對映
如: 一個學生可以報多個課程,一個課程可以有多個學生學習
語法
class A(model.Model): ... class B(model.Model): 屬性 = models.OneToOneField(A, on_delete=xxx)
外來鍵類欄位選項
特殊欄位引數【必須項】:
on_delete
其餘常用的欄位選項【非必須項】;如:
建立作家和作家妻子類
# file : xxxxxxxx/models.py from django.db import models class Author(models.Model): '''作家模型類''' name = models.CharField('作家', max_length=50) class Wife(models.Model): '''作家妻子模型類''' name = models.CharField("妻子", max_length=50) author = models.OneToOneField(Author, on_delete=models.CASCADE) # 增加一對一屬性
建立一對一的資料記錄
from .models import * author1 = Author.objects.create(name='王老師') wife1 = Wife.objects.create(name='王夫人', author=author1) # 關聯王老師 author2 = Author.objects.create(name='小澤老師') # 一對一可以沒有資料對應的資料
資料查詢
正向查詢
直接通過關聯屬性查詢即可
# 通過 wife 找 author from .models import Wife wife = Wife.objects.get(name='王夫人') print(wife.name, '的老公是', wife.author.name)
反向查詢
# 通過 author.wife 關聯屬性 找 wife,如果沒有對應的wife則觸發異常 author1 = Author.objects.get(name='王老師') print(author1.name, '的妻子是', author1.wife.name) author2 = Author.objects.get(name='小澤老師') try: print(author2.name, '的妻子是', author2.wife.name) except: print(author2.name, '還沒有妻子')
語法
當一個A類物件可以關聯多個B類物件時
class A(model.Model): ... class B(model.Model): 屬性 = models.ForeignKey("一"的模型類, on_delete=xx)
有二個出版社對應五本書的情況.
清華大學出版社 有書
北京大學出版社 有書
建立模型類
# file: otm/models.py from django.db import models class Publisher(models.Model): '''出版社【一】''' name = models.CharField('名稱', max_length=50, unique=True) class Book(models.Model): '''書【多】''' title = models.CharField('書名', max_length=50) publisher = ForeignKey(Publisher, on_delete=models.CASCADE)
建立資料
#先建立 '一' ,再建立 '多' from .models import * pub1 = Publisher.objects.create(name='清華大學出版社') Book.objects.create(title='C++', publisher=pub1) Book.objects.create(title='Java', publisher_id=1) #高階建立 - 利用 反向屬性 pub2 = Publisher.objects.create(name='北京大學出版社') pub2.book_set.create(title='西遊記')
資料查詢
通過 Book 查詢 Publisher【正向】
通過 publisher 屬性查詢即可 book.publisher abook = Book.objects.get(id=1) print(abook.title, '的出版社是:', abook.publisher.name)
通過 Publisher 查詢 對應的所有的 Book 【反向】
Django會在Publisher中增加一個屬性來表示對對應的Book們的查詢參照
屬性:book_set 等價於 objects
# 通過出版社查詢對應的書 pub1 = Publisher.objects.get(name='清華大學出版社') books = pub1.book_set.all() # 通過book_set 獲取pub1對應的多個Book資料物件 #books = Book.objects.filter(publisher=pub1) # 也可以採用此方式獲取 print("清華大學出版社的書有:") for book in books: print(book.title)
多對多表達物件之間多對多複雜關係,如: 每個人都有不同的學校(小學,初中,高中,…),每個學校都有不同的學生…
語法
在關聯的兩個類中的任意一個類中,增加:
屬性 = models.ManyToManyField(MyModel)
class Author(models.Model): ... class Book(models.Model): ... authors = models.ManyToManyField(Author)
建立模型類
class Author(models.Model): '''作家模型類''' name = models.CharField('作家', max_length=50) def __str__(self): return self.name class Book(models.Model): '''書模型類''' title = models.CharField('書名', max_length=50) authors = models.ManyToManyField(Author) def __str__(self): return self.title
建立資料
方案1 先建立 author 再關聯 book author1 = Author.objects.create(name='呂老師') author2 = Author.objects.create(name='王老師') # 呂老師和王老師同時寫了一本Python book11 = author1.book_set.create(title="Python") author2.book_set.add(book11) 方案2 先建立 book 再關聯 author book = Book.objects.create(title='python1') #郭小鬧和呂老師都參與了 python1 的 創作 author3 = book.authors.create(name='guoxiaonao') book.authors.add(author1)
資料查詢
通過 Book 查詢對應的所有的 Author【正向】
book.authors.all() -> 獲取 book 對應的所有的author的資訊
book.authors.filter(age__gt=80) -> 獲取book對應的作者中年齡大於80歲的作者的資訊
通過 Author 查詢對應的所有的Book【反向】
Django會生成一個反向屬性 book_set 用於表示對對應的book的查詢物件相關操作
author.book_set.all() author.book_set.filter()
到此這篇關於Django資料對映(一對一,一對多,多對多)的文章就介紹到這了,更多相關Django 資料對映內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45