Django模型類中關於外來鍵關聯一些小知識點

2021-10-01 17:37:36 字數 1483 閱讀 1254

模型類如下:

比如: role = roles.objects.get(rname='葉修')  這裡role就是乙個類物件, role中包含葉修的所有資訊, 可以通過role.rage, role.source  等通過 . 來獲取屬性

一:roles模型類中會有乙個隱藏屬性: rbook_id  值是整型, 是books模型類中的id   是每個角色所屬的**的id, 這一點從資料庫表中可以看到

二:roles中的rbook欄位型別(外來鍵屬性)是乙個類物件, 是books類的類物件, 包含books對應**中的所有資訊, 這才是真正的隱藏屬性, 這個字段真實存在, 但是資料庫表中卻不會顯示. 因為這是乙個類物件, 資料庫表中也沒發顯示. 所以roles.rbook.books中屬性   就可以拿到選中角色對應books中對應**的所有屬性

什麼叫選中角色對應books中**的所有屬性呢?

舉個例子就明白了

假如說, 我們要找蕭瑟屬於哪本**,並返回**的名字和作者(根據角色找**)

首先先確定蕭瑟這個角色:

role = roles.objects.get(rname='蕭瑟')   這就找到了蕭瑟這個角色, role是乙個類物件, 這個類物件包含蕭瑟一行的所有東西,自然也包含蕭瑟這個一行的rbook欄位

其次根據角色找**

roles.rbook.bname    : 這就是**名字

roles.rbook.writer      : 這就是**作者

所以  蕭瑟這個role物件中的rbook是包含books中少年歌行那一行的所有資料, 而不是books中的所有資料

books中的外來鍵屬性book也是同理, 因為有related_name = 'rbooks',所以在books模型類中, rbook也是乙個隱藏屬性

1, 原理: roles.rbook  roles類使用rbook類屬性, 二rbook有事books的類物件,可以拿到對應books模型類中的對應**的所有資訊, 所以所以roles.rbook.books中屬性   就可以拿到選中角色對應books中對應**的所有屬性

2, 在序列化器中若想通過rbook欄位拿到books中對應**的一些資訊(如果只獲取books中的id或者書名, 直接用序列化器自帶的兩個方法就行, 注意一點, 要想用自帶方法取得書名, books類中需定義魔法方法__str__   並返回書名), 就需要再定義乙個序列化器(序列化器不就是物件轉字典嗎, rbook就是books的類物件)

mysql 中不能關聯外來鍵 mysql 外來鍵關聯

mysql 外來鍵關聯 什麼是外來鍵 外來鍵是乙個特殊的索引,用於關聯兩個表,只能是指定內容。如我將新建乙個daka的表,然後將此表的class id 與另外乙個class的表的cid欄位關聯 class表 create table class cid int 11 not null auto in...

django模型中有外來鍵關係的表刪除相關設定

例如有author authordetail兩表 author models.onetoonefield to author null true,related name detail db constraint false,on delete models.cascade 1 關係字段放在auth...

django中的資料庫外來鍵操作

以mysql為例 1 在model中定義兩個資料表,食物資訊和食物類別資訊 class foodinfo models.model food id models.autofield max length 4 自定義主鍵,不指定主鍵缺省會生成乙個名為 id 列的主鍵 food name models....