Django层级模型定义及序列化嵌套的方法
生活随笔
收集整理的這篇文章主要介紹了
Django层级模型定义及序列化嵌套的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
----------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_namedef __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 = GoodsCategoryfields = ['name','code','desc','category_type','parent_category','is_tab','add_time'] # class CategorySerializer2(serializers.ModelSerializer):'''二級分類'''sub_cat = CategorySerializer3(many=True)class Meta:model = GoodsCategoryfields = ['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 = GoodsCategoryfields = ['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',否則會報錯。
?
轉載于:https://www.cnblogs.com/airapple/p/9237699.html
總結
以上是生活随笔為你收集整理的Django层级模型定义及序列化嵌套的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java JDBC数据库 之 DBUti
- 下一篇: Jmeter中文乱码问题