目錄斷關聯表關係:
表關係:
外來鍵字段屬性:
子序列化:
class book(basemodel):
name = models.charfield(max_length=64)
price = models.decimalfield(max_digits=10, decimal_places=2)
publish = models.foreignkey(to='publish', related_name='books', db_constraint=false, on_delete=models.do_nothing, null=true)
authors = models.manytomanyfield(to='author', related_name='books', db_constraint=false)
def __str__(self):
return self.name
class publish(basemodel):
name = models.charfield(max_length=64)
address = models.charfield(max_length=64)
class author(basemodel):
name = models.charfield(max_length=64)
class authordetail(basemodel):
mobile = models.charfield(max_length=64)
author = models.onetoonefield(to=author, related_name='detail', db_constraint=false, on_delete=models.cascade)
在基表中對應的類中寫下面兩行**,其他錶類繼承基錶類後資料庫遷移才有效。如果不寫這兩行**,直接執行資料庫遷移命令,繼承基錶類的其他表中不會生成應有的字段。
class meta:
abstract = true
1、不會影響連表查詢操作效率
2、會提公升連表增刪改的操作效率
3、易於後期資料庫表的重構
1、資料庫本身沒有連表檢測,容易出現髒資料,需要通過嚴格的邏輯避免髒資料的引數(必要時管理髒資料)
舉例:a依賴b,先插入a記錄,該記錄對應的b記錄沒產生,在沒有關聯的情況下,該操作可以實現,但是資料就是髒資料。接著再將b資料新增,髒資料就得到處理了,返過來先操作b後操作a,更滿足邏輯思維,一樣可以執行。通過邏輯將ab表進行連表查詢,不會有任何異常。
1、book 和 publish 一對多:外來鍵在多的一方 book中
2、book 和 author 多對多: 外來鍵在查詢頻率高的一方 book
3、author 和 authordetail 一對一: 外來鍵在查詢頻率低的一方更合理
1、related_name 在外鍵中設定外來鍵反向查詢的欄位名:正向找欄位名,反向找related_nema值。
2、on_delete在外鍵中必須設定,表示級聯關係,在django 1.x下,系統預設提供(值為models.cascade), django 2.x下,必須手動明確。
cascade: 預設值,級聯。
例子:作者沒,詳情一定沒,存在沒意義。
do_nothing:外來鍵不會被級聯,假設a表依賴b表,b記錄刪除,a表的外來鍵字段不做任何處理。
例子:作者沒,書還是作者寫的;出版社沒,書還是該出版社出版的。
set_default:假設a表依賴b表,b記錄刪除,a表的外來鍵字段設定為default屬性設定的值,所以必須配合default屬性使用。
例子:部門沒,部門員工進入待定部門(注:關聯部門表外來鍵可以為空)。
set_null:假設a表依賴b表,b記錄刪除,a表的外來鍵字段設定為null,所以必須配合null=true屬性使用。
注:多對多字段不能設定on_delete級聯關係,預設為級聯,如果要處理級聯關係,需要手動明確關係表,處理關係表中的多個外來鍵
3、db_constraint在外鍵中控制表關聯,預設為true表示關聯,設定false表示斷開關聯(注:該欄位只能給foreignkey進行設定)。
1、只能在序列化中使用,
2、欄位名必須是外來鍵字段,
3、在外鍵關聯資料時多條時,
4、需要明確many=true,
5、是單向操作
tips:只用來展示的長整型數字可以用charfield型別,如**號碼,身份證號。因為它們不會用於計算。
Django 序列化資料之多表資料序列化
1.將查詢後的多張表的資料做序列化操作 2.為什麼要做三張表的序列化操作,因為三張表的字段有些相同有些不同 3.將三張表序列化後的資料進行合併 4.之後將合併後的序列化操作實現分頁查詢操作 data group1qeryset models.group1.objects.all group2qery...
Serializer序列化和反序列化的基礎使用方法
序列化定義 序列化器的作用 封裝了序列化操作 封裝了反序列化操作 反序列化使用 序列化流程 模型類物件 字典 json格式字串 1 獲取目標資料 乙個或者多個模型類物件 單一目標資料 book bookinfo.objects.get pk 2 多個目標資料 books bookinfo.objec...
C DataSet序列化及反序列化
反序列化壓縮的dataset static dataset datasetdeserializedecompress string filepath binaryformatter sfformatter new binaryformatter 定義binaryformatter以反序列化datas...