一:规格表:
<一>:获取规格列表:
1:首先定义一个序列化器,来进行序列化。
分析:模型类字段和前端字段比较:
新建编辑apps/meiduo_admin/serializers/spec_serializers.py
# 规格表的序列化器:
class SpecModelSerializer(serializers.ModelSerializer):
spu = serializers.StringRelatedField() # 前端需要名字
spu_id = serializers.IntegerField() # 默认只能序列化,不能反序列化,显示定义两个都能使用
class Meta:
model = SPUSpecification
fields = ["id", "name", "spu", "spu_id"]
2:视图和路由:
新建编辑apps/meiduo_admin/views/spec_views.py
from rest_framework.viewsets import ModelViewSet
from ..serializers.spec_serializers import *
from ..paginations import MyPage
class SpecView(ModelViewSet):
queryset = SPUSpecification.objects.all()
serializer_class = SpecModelSerializer
pagination_class = MyPage
re_path(r'^goods/specs/$', SpecView.as_view({'get': 'list'})),
3:测试:显示列表

4:路由全部映射,进行测试:
re_path(r'^goods/specs/$', SpecView.as_view({'get': 'list', 'post': 'create'})),
re_path(r'^goods/specs/(?P<pk>\d+)/$', SpecView.as_view({
'get': 'retrieve',
'put': 'update',
'delete': 'destroy'
})),
测试:新建规格重量:

测试:更改重量:

测试:删除重量:

二:选项表:
<一>:序列化返回列表:
1:序列化器:定义一个序列化器,进行序列化。
新建编辑apps/meiduo_admin/serializers/spec_serializers.py
# 规格选项表的序列化器
class OptionModelSerializer(serializers.ModelSerializer):
spec = serializers.StringRelatedField()
spec_id = serializers.IntegerField()
class Meta:
model = SpecificationOption
fields = ['id', 'value', 'spec', 'spec_id']
2:定义视图和路由:
class OptionView(ModelViewSet):
queryset = SpecificationOption.objects.all()
serializer_class = OptionModelSerializer
pagination_class = MyPage
# 选项路由:
re_path(r'^specs/options/$', OptionView.as_view({'get': 'list'})),
3:测试:

4:路由全部映射测试:
re_path(r'^specs/options/$', OptionView.as_view({'get': 'list', 'post': 'create'})),
re_path(r'^specs/options/(?P<pk>\d+)/$', OptionView.as_view({
'get': 'retrieve',
'put': 'update',
'delete': 'destroy'
})),
测试新建选项:发现没有规格数据,所以还要映射规格的信息。

应该给我规格信息:

规格序列化器:
# 规格序列化器
class OptSpecSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = SPUSpecification
fields = [
'id',
'name'
]
规格选项视图:
# 规格选项表
class OptSpecSimpleView(ListAPIView):
queryset = SPUSpecification.objects.all()
serializer_class = OptSpecSimpleSerializer
路由:
re_path(r'^goods/specs/simple/$', OptSpecSimpleView.as_view()),
测试:

测试新建:

测试修改:修改成16.8

删除:

三:频道接口:
<一>: 获取所有频道信息:
1:创建序列化器:
class GoodsChannelSerializers(serializers.ModelSerializer):
group = serializers.StringRelatedField()
group_id = serializers.IntegerField()
category = serializers.StringRelatedField()
category_id = serializers.IntegerField()
class Meta:
model = GoodsChannel
fields = "__all__"
2:创建视图:
class GoodsChannelView(ModelViewSet):
queryset = GoodsChannel.objects.all()
serializer_class = GoodsChannelSerializers
pagination_class = MyPage
# 频道接口:
re_path(r'^goods/channels/$', GoodsChannelView.as_view({"get": "list"})),
测试获取列表接口:拿到了所有的频道。

路由增加:
re_path(r'^goods/channels/$', GoodsChannelView.as_view({"get": "list", "post": "create"})),
<二>: 获取单一频道信息:
1:增加路由:
re_path(r'^goods/channels/(?P<pk>\d+)/$', GoodsChannelView.as_view({"get": "retrieve"})),
2:进行测试:

<三>: 获取频道的所有分组:
1:序列化器:
class GoodsChannelGroupSerializers(serializers.ModelSerializer):
class Meta:
model = GoodsChannelGroup
fields = "__all__"
2:视图和路由:
class GoodsChannelGroupView(ModelViewSet):
queryset = GoodsChannelGroup.objects.all()
serializer_class =GoodsChannelGroupSerializers
pagination_class = MyPage
# 频道组接口:
re_path(r'^goods/channel_types/$', GoodsChannelGroupView.as_view({"get": "list", "post": "create"})),
re_path(r'^goods/channels/(?P<pk>\d+)/$', GoodsChannelGroupView.as_view({"get": "retrieve", 'put': 'update', 'delete': 'destroy'})),
测试:获取频道的分组信息。

浙公网安备 33010602011771号