Django層級模型定義及序列化嵌套的方法

----------Django==2.0.2-----------spa

 

1、Django層級模型的定義code

實例:(商品模型)對象

 

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

注意blog

一、外鍵關聯本身,關聯模型必須是self,不能是模型名,否側會報錯class

   如:parent_category = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True, verbose_name="父類目級別", help_text="父目錄",related_name="sub_cat")date

二、指定 related_name = ''  ,用於關聯對象反向引用模型的名稱(如序列化嵌套要用到)model

2、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']

注意:引用

一、序列化模型中最後一個分類要放在最前面定義im

二、注意嵌套的時候必定要指定以前related_name裏面的值,如: 'parent_category'  中的  related_name的值  ‘sub_cat’

三、另外除了最內層的字段不須要指定sub_cat字段,其餘的序列化模型中必須指定sub_cat字段,另外fields中必須包含'sub_cat',不然會報錯。

相關文章
相關標籤/搜索