zoukankan      html  css  js  c++  java
  • drf 三级菜单后台序列化以及数据库的设计

    第一种,

    model.py结构:

    class GoodsCategory(models.Model):
        """
        商品类别
        """
        CATEGORY_TYPE = (
            (1, "一级类目"),
            (2, "二级类目"),
            (3, "三级类目"),
        )
        name = models.CharField(default="", max_length=30, verbose_name="类别名", help_text="类别名")
        code = models.CharField(default="", max_length=30, verbose_name="类别code", help_text="类别code")
        desc = models.TextField(default="", verbose_name="类别描述", help_text="类别描述")
    category_type
    = models.IntegerField(choices=CATEGORY_TYPE, verbose_name="类目级别", help_text="类目级别") parent_category = models.ForeignKey("self", null=True, blank=True, verbose_name="父类目级别", help_text="父目录", related_name="sub_cat")

    看下这个视图设置,

    class CategoryView(ListAPIView):
        '''
        全部分类
        '''
        queryset = GoodsCategory.objects.filter(category_type=1)
        serializer_class = CategorySerializer

    第二种:

    也可以这样设计数据库:

    class GoodsCategory(BaseModel):
     # """
     # 商品类别
     # """
        name = models.CharField(max_length=10, verbose_name='名称')
        parent = models.ForeignKey('self', null=True, blank=True, on_delete=models.CASCADE, verbose_name='⽗类别',related_name='sub_cat')
        class Meta:
            db_table = 'tb_goods_category'
            verbose_name = '商品类别'
            verbose_name_plural = verbose_name
        def __str__(self):
            return self.name

    视图这样写:

    class CategoryInfoView(mixins.ListModelMixin,GenericAPIView):
        queryset = GoodsCategory.objects.filter(parent=None)
        serializer_class = CategorySerializer
        def get(self,request):
            return self.list(request)

    因为第一级目录的父级是None,然后以这个为条件实现查询,有点像三级联动数据库的设计

    序列化实现充分用的是数据库反查,related_name设置。

    from rest_framework import serializers
    from .models import GoodsCategory
    
    class CategorySerializer3(serializers.ModelSerializer):
        class Meta:
            model = GoodsCategory
            fields = "__all__"
    
    
    class CategorySerializer2(serializers.ModelSerializer):
        sub_cat = CategorySerializer3(many=True)
        class Meta:
            model = GoodsCategory
            fields = "__all__"
    
    
    class CategorySerializer(serializers.ModelSerializer):
        sub_cat = CategorySerializer2(many=True)
        class Meta:
            model = GoodsCategory
            fields = "__all__"

     数据结构如下展示:

  • 相关阅读:
    (转) Hibernate检索方式概述
    (转) Hibernate注解开发
    (转)Hibernate关联映射——一对多(多对一)
    (转)学习淘淘商城第二十二课(KindEditor富文本编辑器的使用)
    (转)Hibernate关联映射——对象的三种关系
    (转)Hibernate的一级缓存
    (转) Hibernate持久化类与主键生成策略
    ( 转)Hibernate常用API
    (转)Hibernate的配置详解
    范仁义css3课程---22、float导致的父容器高度坍塌及解决
  • 原文地址:https://www.cnblogs.com/lvye001/p/10214830.html
Copyright © 2011-2022 走看看