Django層級模型定義及序列化巢狀的方法

2021-09-25 10:15:11 字數 2804 閱讀 3080

----------django==2.0.2-----------

一、django層級模型的定義

例項:(商品模型)

class

goodscategory(models.model):

"""商品分類

"""category_type =(

(1, "

一級類目"),

(2, "

二級類目"),

(3, "

**類目"),

)name = models.charfield('

類別名',default="", max_length=30,help_text="

類別名"

) code = models.charfield("

類別code

",default="", max_length=30,help_text="

類別code")

desc = models.textfield("

類別描述

",default="",help_text="

類別描述")

#目錄樹級別

category_type = models.integerfield("

類目級別

",choices=category_type,help_text="

類目級別")

#設定models有乙個指向自己的外來鍵

parent_category = models.foreignkey("

self

", on_delete=models.cascade, null=true, blank=true, verbose_name="

父類目級別

", help_text="

父目錄",related_name="

sub_cat")

is_tab = models.booleanfield("

是否導航

",default=false,help_text="

是否導航")

add_time = models.datetimefield("

新增時間

",default=datetime.now)

class

meta:

verbose_name = "

商品類別

"verbose_name_plural =verbose_name

def__str__

(self):

return self.name

注意1、外來鍵關聯自己,關聯模型必須是self,不能是模型名,否側會報錯

如:parent_category = models.foreignkey("self", on_delete=models.cascade, null=true, blank=true, verbose_name="父類目級別", help_text="父目錄",related_name="sub_cat")

2、指定 related_name = ''  ,用於關聯物件反向引用模型的名稱(如序列化巢狀要用到)

二、django序列化巢狀操作

class

categoryserializer3(serializers.modelserializer):

'''**分類

'''class

meta:

model =goodscategory

fields = ['

name

','code

','desc

','category_type

','parent_category

','is_tab

','add_time']

#class

categoryserializer2(serializers.modelserializer):

'''二級分類

'''sub_cat = categoryserializer3(many=true)

class

meta:

model =goodscategory

fields = ['

name

','code

','desc

','category_type

','parent_category

','is_tab

','add_time

','sub_cat']

class

categoryserializer(serializers.modelserializer):

'''商品一級分類

'''sub_cat= categoryserializer2(many=true)

class

meta:

model =goodscategory

fields = ['

name

','code

','desc

','category_type

','parent_category

','is_tab

','add_time

','sub_cat

']

注意:1、序列化模型中最後乙個分類要放在最前面定義

2、注意巢狀的時候一定要指定之前related_name裡面的值,如: 'parent_category'  中的  related_name的值  『sub_cat』

3、另外除了最內層的字段不需要指定sub_cat欄位,其他的序列化模型中必須指定sub_cat欄位,另外fields中必須包含'sub_cat',否則會報錯。

django 定義模型

字段型別 字段選項 關係可以維護遞迴的關聯關係,使用 self 指定,詳見 自關聯 用一訪問多 物件.模型類小寫 set bookinfo.heroinfo set用一訪問一 物件.模型類小寫 heroinfo.bookinfo訪問id 物件.屬性 id heroinfo.book id class...

Django模型類定義

資料庫表名 可通過db table指明資料庫表名。關於主鍵 django會為表建立自動增長的主鍵列,每個模型只能有乙個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。屬性命名限制 字段型別...

Django定義和使用模型

學習動力 我今年的專案主要基於django開發,學習了很多新東西。我很多時候,擔心日後會忘記很多有趣的東西,我想寫下筆記。但是從哪個方面入手,我沒有思路。所以檢視了一些書,根據目錄進行總結。希望自己不會錯過什麼!定義模型 為什麼使用orm django豐富的變數型別 為了簡單,我直接編寫和官網一樣的...