----------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',不然會報錯。