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_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',否則會報錯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM