后台订单管理

后端

创建新的子应用

在项目内再创建一个orders子应用
在项目settings.py文件中注册子应用
在orders子应用中创建urls.py文件配置路由
然后在orders自已子应用中编写

编写模型类

生成迁移文件进行迁移
注意外键绑定的表要导入

from django.db import models
from users.models import User
from goods.models import SKUS
# Create your models here.

#订单信息模型类
class Addr(models.Model):
    receiver=models.CharField('收件人',max_length=20)
    receiver_mobile=models.CharField('手机号',max_length=11)
    receiver_addr=models.CharField('收货地址',max_length=100)
    user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='用户')
    def __str__(self):
        return f'用户{self.user.username}的收货地址,收件人{self.receiver}'
    class Meta:
        db_table='addr'
        verbose_name_plural='收货地址'
#订单信息表
class OrderInfo(models.Model):
    PAY_METHOD=(
        (1, '支付宝'),
        (2,'微信支付'),
        (3,'银联支付'),
        (4,'货到付款')
    )
    STATUS=(
        (1,'待支付'),
        (2,'待发货'),
        (3,'待收货'),
        (4,'待评价'),
        (5,'已完成')
    )
    order_id=models.CharField('订单编号',max_length=64,primary_key=True)
    user=models.ForeignKey(User,on_delete=models.CASCADE,related_name='orders',verbose_name='下单用户')
    addr=models.ForeignKey(Addr,on_delete=models.CASCADE,verbose_name='收货地址')
    total_count=models.IntegerField('商品总数',default=1)
    total_amount=models.DecimalField('总价格',max_digits=10,decimal_places=2)
    freight=models.DecimalField('邮费',max_digits=10,decimal_places=2)
    pay_method=models.SmallIntegerField('支付方式',default=1,choices=PAY_METHOD)
    status=models.SmallIntegerField('支付状态',default=1,choices=STATUS)
    created_time=models.DateTimeField('订单创建时间',auto_now_add=True)
    def __str__(self):
        return self.order_id
    class Meta:
        db_table='order_info'
        verbose_name_plural='订单信息表'
#订单商品表
class OrderGood(models.Model):
    SCORE=(
        (1,'20分'),
        (2,'40分'),
        (3,'60分'),
        (4,'80分'),
        (5,'100分')
    )
    sku=models.ForeignKey(SKUS,on_delete=models.CASCADE,verbose_name='订单商品')
    count=models.IntegerField('购买数量',default=1)
    price=models.DecimalField('价格',max_digits=10,decimal_places=2)
    order=models.ForeignKey(OrderInfo,on_delete=models.CASCADE,related_name='goods',verbose_name='所属订单')
    comment=models.TextField('评论信息',default='')
    score=models.SmallIntegerField('评分',default=5,choices=SCORE)
    is_anonymous=models.BooleanField('是否匿名评论',default=False)
    is_commented=models.BooleanField('是否评论',default=False)
    def __str__(self):
        return f'订单是{self.order.order_id}-商品{self.sku.name}'
    class Meta:
        db_table='order_good'
        verbose_name_plural='订单商品'
#支付信息
class PayInfo(models.Model):
    trade_id=models.CharField('支付编号',max_length=100,unique=True,null=True,blank=True)
    order=models.ForeignKey(OrderInfo,on_delete=models.CASCADE,verbose_name='订单')
    def __str__(self):
        return '交易编号%s'%self.trade_id
    class Meta:
        db_table='pay_info'
        verbose_name_plural='支付信息'

编写序列化器

在子应用创建serializers.py文件

from rest_framework import serializers
from .models import *

#订单信息的序列化器
class OrderInfoSer(serializers.ModelSerializer):
    status_name=serializers.SerializerMethodField(read_only=True)
    def get_status_name(self,obj):
        return obj.get_status_display()
    user_name=serializers.SerializerMethodField(read_only=True)
    def get_user_name(self,obj):
        return obj.user.username
    class Meta:
        model=OrderInfo
        fields='__all__'
        read_only_fields=['id']

#订单商品的序列化器
class OrderGoodSer(serializers.ModelSerializer):
    class Meta:
        model=OrderGood
        fields="__all__"
        read_only_fields=['id']

编写视图类

from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from rest_framework.views import APIView
from rest_framework.response import Response
from .models import *
from goods.models import *
from .serializers import *
from  goods.serializers import SKUSer,SPUSer

# Create your views here.
#订单信息的视图
class OrderInfoViewSet(ModelViewSet):
    queryset = OrderInfo.objects.all()
    serializer_class = OrderInfoSer
    lookup_field = 'pk'
    lookup_url_kwarg = 'pk'

    def list(self, request, *args, **kwargs):
        orderlist = self.get_queryset()
        order_list_ser = self.get_serializer(orderlist, many=True)
        print("order_list_ser:", order_list_ser.data)
        # return Response(order_ser.data)
        order_list = []
        for i in orderlist:
            order_ser = self.get_serializer(i)

            print('order_ser', order_ser.data)
            order_goods = i.goods.all()
            order_goods_ser = OrderGoodSer(order_goods, many=True)
            print('order_goods_ser', order_goods_ser.data)
            # return Response(order_goods_ser.data)
            temp_list = []
            for y in order_goods_ser.data:
                y["sku"] = SKUSer(SKUS.objects.filter(id=y.get("sku")).first()).data
                temp_list.append(y)
            order_dict = order_ser.data
            order_dict["skus"] = temp_list
            order_list.append(order_dict)
        # for e in order_dict:

        return Response(order_list)
    #重写retrieve方法
    def retrieve(self, request, *args, **kwargs):
        # 1.获取要检索的订单对象
        order = self.get_object()
        order_ser = self.get_serializer(order)

        # 2.根据订单对象获取所有的订单商品
        order_goods = order.goods.all()
        order_goods_ser = OrderGoodSer(order_goods, many=True)

        # 3.将每个订单商品中的sku的值换成商品字典数据
        temp_list = []
        for i in order_goods_ser.data:
            # i["sku"] = SKUSer(SKU.objects.filter(id=i.get("sku")).first()).data
            Sku_list = SKUSer(SKUS.objects.filter(id=i.get("sku")).first()).data
            # SkuSer_list = SKUSer(Sku_list)
            i["sku"] = Sku_list
            temp_list.append(i)
            # print(SkuSer_list)
            Sku_list["spu"] = SPUSer(SPUS.objects.filter(id=Sku_list.get("spu")).first()).data

        # 4. 整体组织数据结构,并返回
        order_dict = order_ser.data
        order_dict["skus"] = temp_list
        return Response(order_dict)

    def update(self, request, *args, **kwargs):
        #1.获取前段数据
        status=request.data.get('status')
        #2.查询订单对象
        order=self.get_object()
        ##3.更新
        order.status=status
        order.save()
        return Response({'code':200,'msg':'更新成功'})

配置路由

# from django.contrib import admin
from django.urls import path
from .views import *
from rest_framework import routers
urlpatterns = [

]
router=routers.SimpleRouter()
router.register('orderInfo',OrderInfoViewSet)
urlpatterns+=router.urls

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
商城的后台订单管理系统需要实现以下几个方面的: 1. 订单管理:包括订单的创建修改、删除、查询等功能,以及订单状态变更和订单的审核等功能。 2. 商品:包括商品的添加修改、上下架删除等功能,以及商品分类的管理和商品属性的设置等功能。 3. 用户管理:包括用户的注册、登录、个人信息管理等功能,以及用户权限的管理和用户组的设置等功能。 4. 支付管理:包括支付方式的设置和支付流程的管理等功能。 5. 物流管理:包括物流方式的设置和物流流程的管理等功能。 实现以上功能需要考虑以下几个方面: 1. 数据库设计:需要设计订单、商品、用户、支付、物流等相关数据表,并确定各个表之间的关系。 2. 后端开发:需要使用后端开发语言,如Java、Python等,实现订单、商品、用户、支付、物流等相关功能的逻辑。 3. 前端开发:需要使用前端开发语言,如HTML、CSS、JavaScript等,实现订单、商品、用户、支付、物流等相关功能的界面。 4. 接口设计:需要设计后端接口,与前端进行数据交互,实现订单、商品、用户、支付、物流等相关功能的数据传输。 5. 安全性考虑:需要考虑数据安全性和用户权限控制等问题,确保系统的安全性。 总之,商城的后台订单管理系统需要从多个方面进行设计和开发,以实现各种功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值