这两节主要是说获取商品类别的1 2 3类的列表和某个类的详情
我直接上代码吧
views.py:
from .serializers import CategorySerializer class CategoryViewset(mixins.ListModelMixin, # 继承这个类是为了前端请求某个字段的详细内容所用到。 # 也就是说 只需要添加继承了这个类 其他地方都不需要在更改,就可以通过get+id获取到某个字段的详情。 mixins.RetrieveModelMixin, viewsets.GenericViewSet): # 这个注释这样写是为了rest_framework自动生成文档功能的自动对类的描述所使用的 """ list: 商品分类列表数据 """ queryset = GoodsCategory.objects.filter(category_type=1) serializer_class = CategorySerializerserializers.py
from rest_framework import serializers from goods.models import Goods, GoodsCategory class CategorySerializer3(serializers.ModelSerializer): class Meta: model = GoodsCategory fields = "__all__" class CategorySerializer2(serializers.ModelSerializer): # 2.再看这里 # 获得3级分类 反正就这么一层一层嵌套获取 sub_cat = CategorySerializer3(many=True) class Meta: model = GoodsCategory fields = "__all__" class CategorySerializer(serializers.ModelSerializer): # 1. 先看这里 # 这是第一层 sub_cat需要跟model中的字段键related_name 一致 # 这样就能获得第二层的数据(也就是二级分类) # 必须要加 many=True 因为有可能有些数据是没有二级或三级分类数据 sub_cat = CategorySerializer2(many=True) class Meta: model = GoodsCategory fields = "__all__"model.py 只是展示用。
class GoodsCategory(models.Model): """ 商品类别 """ CATEGORY_TYPE = ( (1, u'一级类目'), (2, u'二级类目'), (3, u'三级类目') ) name = models.CharField(default='', max_length=30, verbose_name=u'类别名', help_text=u'类别名') code = models.CharField(default='', max_length=30, verbose_name=u'类别code', help_text=u'类别code' ) desc = models.TextField(default='', verbose_name=u'类别描述', help_text=u'类别描述') category_type = models.IntegerField(choices=CATEGORY_TYPE, verbose_name=u'类目级别', help_text=u'类目级别') # 看 就这里 就这个字段 因为这个字段是可空的 所以 在serializers那边必须设置many=True parent_category = models.ForeignKey("self", null=True, blank=True, verbose_name=u'父类别', help_text=u'父类别', related_name='sub_cat', on_delete=models.CASCADE) is_tab = models.BooleanField(default=False, verbose_name=u'是否导航', help_text=u'是否导航') add_time = models.DateTimeField(default=datetime.now, verbose_name=u'添加时间') class Meta: verbose_name = u'商品类别' verbose_name_plural = verbose_name def __str__(self): return self.name这样就完成了商品类别的数据接口的返回:
url:
然后这是某类的详细内容:
嗯。。从一开始学习到这里感觉。。。rest_framework好屌 那我之前写那么多VIEW,form, url 是为了啥= =
对了 5.8 5.9都是讲理论的我就写了 直接贴一个层级关系吧 现在还是云里雾里 等教程过了一遍之后再回来这里再看两遍应该会更有效果
完结