四 Django學習之關係表介紹及使用

2022-08-10 10:48:16 字數 4104 閱讀 2127

xx = models.onetoonefield(to='表名',to_field='欄位名',on_delete=models.cascade)  

#on_delete:刪除時的一些級聯效果,to_field可以不寫,預設是關聯到另一張表的主鍵,on_delete在1.x版本的django中不用寫,預設是級聯刪除的,2.x版本的django要寫.

方式1
new_author_detail = models.authordetail.objects.create(

birthday='1979',

telephone='138',

addr='black'

)# 方式1

models.author.objects.create(

name='王濤',

age=18,

#直接將物件賦值屬性

authordetail=new_author_detail

)

方式2
new_author_detail = models.authordetail.objects.create(

birthday='1979',

telephone='138',

addr='black'

)# 方式2

models.author.objects.create(

name='王濤',

age=18,

authordetail_id=new_author_detail.id

)

表一外來鍵關聯到表二,表一刪除,不影響表2,表2刪除會影響表1

models.authordetail.objects.get(id=2).delete()

models.author.objects.get(id=3).delete()

models.author.objects.filter(id=5).update(

name='崔老師',

age=16,

authordetail=models.authordetail.objects.get(id=5),

authordetail_id=4,

)

xx = models.foreignkey(to='表名',to_field='欄位名',on_delete=models.cascade)
方式1

外來鍵關聯的直接賦值為某個物件即可

obj = models.publish.objects.get(id=1)

models.book.objects.create(

title='李帥',

publishdate='2019-07-22',

price=3,

publishs=obj

)

方式2
obj = models.publish.objects.get(id=1)

models.book.objects.create(

title='李帥test',

publishdate='2019-07-22',

price=3.5,

publishs_id=1 #可以是整型,也可以是物件的屬性(id)

#publishs_id=obj.id

)

models.publish.objects.get(id=1).delete()

models.book.objects.get(nid=1).delete()

models.book.objects.filter(pk=4).update(

title='b哥的往事2',

publishs=models.publish.objects.get(id=3),

publishs_id=3, #注意級聯關係 不能亂改

)

xx = models.manytomanyfield(to='另外乙個表名') #這是自動建立第三表
book_obj = models.book.objects.get(nid=1)

book_obj.authors.add(*[1,2])

book_obj = models.book.objects.get(nid=6)

book_obj.authors.remove(6)#將某個特定的物件從被關聯物件集合中去除。

book_obj.authors.remove(*[5,6])

book_obj.authors.clear() #情況與nid 6相關聯的所有

book_obj.authors.add(*[1,])#新增表記錄

book_obj.authors.set('1')#先清空然後在設定

book_obj.authors.set(['5','6']) #刪除然後更新

from django.db import models

# create your models here.

from django.db import models

# create your models here.

#作者表

class author(models.model): #比較常用的資訊放到這個表裡面

name=models.charfield( max_length=32)

age=models.integerfield()

# authordetail=models.onetoonefield(to="authordetail",to_field="nid",on_delete=models.cascade)

authordetail=models.onetoonefield(to='authordetail') #一對一到authordetail表 生成為表字段之後,會自動變為authordetail_id這樣有乙個名稱

# 外來鍵字段 -- 外來鍵欄位名_id

# foreign+unique

def __str__(self):

return self.name

#作者詳細資訊表

class authordetail(models.model):

birthday=models.datefield()

# telephone=models.bigintegerfield()

telephone=models.charfield(max_length=32)

addr=models.charfield( max_length=64)

def __str__(self):

return self.addr

#出版社表 和 書籍表 是 一對多的關係

class publish(models.model):

name=models.charfield( max_length=32)

city=models.charfield( max_length=32)

email=models.emailfield() #charfield -- asdfasdf

def __str__(self):

return self.name

#書籍表

class book(models.model):

nid = models.autofield(primary_key=true)

title = models.charfield( max_length=32)

publishdate=models.datefield()

price=models.decimalfield(max_digits=5,decimal_places=2) #decimal(16,2)

publishs=models.foreignkey(to="publish")

authors=models.manytomanyfield(to='author',)

def __str__(self):

return self.title

Django學習 21 表關係引數

一對多關係 foreignkey foreignobject foreignobject relatedfield to,要進行關聯的表名 to field none,要關聯的表中的欄位名稱 on delete none,當刪除關聯表中的資料時,當前表與其關聯的行的行為 models.cascade...

Django學習 介紹Django

django 乙個可以使web開發工作愉快並且高效的web框架。django提供了通過web開發模式的高度抽象,通過此次學習,明白兩個方面 第一,深度解釋django到底作了哪些工作以及如何用django構建web應用 第二,在適當地方討論更高階的概念,並解釋如何在自己的專案中高效使用這些工具。通過...

django 表關係之 多對多

比如一篇文章和標籤的關係。一篇文章可以有多個標籤,乙個標籤可以被多篇文章所引用。因此標籤和文章的關係就是典型的多對多的關係。下邊只是一篇文章對應多個標籤 乙個標籤對應多篇文章就不舉例了,自己腦補下!這樣我們會通過articles欄位來獲取某個標籤tags下邊的所有文章 articles models...