栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

后台实现spu管理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

后台实现spu管理

简介

其实应该先配置spu在配置sku
根据教材上的颠倒了一下

配置模型类

跟配置sku的博客一样
其中关联了品牌表跟商品种类表

from django.db import models
# spu 表
class SPUS(models.Model):
    name=models.CharField('spu',max_length=20)
    #                       #绑定品牌表
    brand=models.ForeignKey(Brand,on_delete=models.CASCADE,verbose_name='所属品牌')
    #                       #商品种类表                       #反向查询可以直接调用
    category1=models.ForeignKey(Cate,on_delete=models.CASCADE,related_name='cate1_spu',verbose_name='一级类别')
    category2=models.ForeignKey(Cate,on_delete=models.CASCADE,related_name='cate2_spu',verbose_name='二级类别')
    category3=models.ForeignKey(Cate,on_delete=models.CASCADE,related_name='cate3_spu',verbose_name='三级类别')
    comment_num=models.IntegerField('评论量',default=0)
    sales=models.IntegerField('销量',default=0)
    desc_detail=models.TextField('详细描述',default='')
    desc_pack=models.TextField('包装信息',default='')
    desc_service=models.TextField('售后服务',default='')
    def __str__(self):
        return self.name
    class Meta:
        db_table='spu'

# 'sku'  商品表
class SKUS(models.Model):
    name=models.CharField('sku',max_length=100)
    describe=models.CharField('商品描述',max_length=500)
    price=models.DecimalField('价格',decimal_places=2,max_digits=8)
    stick=models.IntegerField('库存',default=0)
    sales=models.IntegerField('销量',default=0)
    detail=models.TextField('详情',default='')
    image_default=models.CharField('默认图片',max_length=300,default='')
    is_selling=models.BooleanField('是否在售',default=True)  #布尔类型
    #                   #绑定商品种类表
    cate=models.ForeignKey(Cate,on_delete=models.CASCADE,verbose_name='一级类别')
    #                   #绑定spu表
    spu=models.ForeignKey(SPUS,on_delete=models.CASCADE,verbose_name='所属SPU')
    def __str__(self):
        return self.name
    class Meta:
        db_table='sku'
        verbose_name_plural='商品sku'
创建序列化器
from rest_framework import serializers
from .models import *
#SKU模型类的序列化器
class SKUSer(serializers.ModelSerializer):
    cate_name=serializers.SerializerMethodField(read_only=True)
    def get_cate_name(self,obj):
        return obj.cate.name
    class Meta:
        model=SKUS
        fields='__all__'
        read_only_fields=['id','detail','image_default','sales']
#SPU模型类的序列化器
class SPUSer(serializers.ModelSerializer):
    brand_name=serializers.SerializerMethodField(read_only=True)
    def get_brand_name(self,obj):
        return obj.brand.name
    class Meta:
        model=SPUS
        fields='__all__'
        read_only_fields=['id']
编写视图类

子级类别的视图根据id获取对应id下的全部数据
一级,二级,三级 cate商品种类表

#子级类别的视图
class SubCatesAPIView(RetrieveUpdateDestroyAPIView):
    queryset = Cate.objects.all()
    serializer_class = GoodsCateSer
    lookup_field = 'pk'
    lookup_url_kwarg = 'pk'
    def retrieve(self, request, *args, **kwargs):
        #获取父级类别对象
        # /v1/goods/channels/subCate/1/
        parent_obj=self.get_object()
        #根据父级类别,获取子级类别
        subs_queryset=parent_obj.subs.all()
        #子级类别序列化
        ser=self.get_serializer(subs_queryset,many=True)
        #返回响应
        return Response(ser.data)
# sku视图集
class SKUAPIView(ModelViewSet):
    queryset = SKUS.objects.all()
    serializer_class = SKUSer
    lookup_field = 'pk'
    lookup_url_kwarg = 'pk'

#spu的视图
class SPUAPIView(ModelViewSet):
    queryset = SPUS.objects.all()
    serializer_class = SPUSer
    lookup_field = 'pk'
    lookup_url_kwarg = 'pk'
    pagination_class = MyPagination

#又一个加载所有品牌的视图,避免分页器导致数据不全
class BarabdsAllAPIView(ListAPIView):
    queryset = Brand.objects.all()
    serializer_class = BrandSer

配置路由

from django.urls import path
from rest_framework import routers
from .views import *
urlpatterns = [
 #上传logo
    #频道组的接口,获取所有、新增一个
    path('channels/',ListCreateGroupAPIView.as_view()),
    #频道组的接口,检索,更改,删除
    path('channels//',ReUpDeAPIViwe.as_view()),
    #加载所有的一级类别
    path('channels/firstcates/',FirstCateAPIView.as_view()),
    #加载子级类别
    path('channels/subCates//',SubCatesAPIView.as_view()),
    #加载所有的品牌数据
    path('brands/all/',BarabdsAllAPIView.as_view()),

]
#品牌的路由
router=routers.SimpleRouter()
router.register('brands',BrandViewSet,'brands')
router.register('skus',SKUAPIView,'skus')
router.register('spus',SPUAPIView,'spus')
urlpatterns+=router.urls
前端

找到对应的veu组件,进行配置
实现sku的增删改查
例如:Spu.vue 获取全部数据


例如:SpuTable.vue进行展示修改数据
修改事件中的路由,字段等


例如:SpuEdit.vue进行修改数据
修改事件中的路由,字段等
添加绑定外键的字段实现下拉框添加
添加跟修改获取数据类似


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002425.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号