前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年02月 Django商城项目 31-订单模型数据库设计

【愚公系列】2022年02月 Django商城项目 31-订单模型数据库设计

作者头像
愚公搬代码
发布2022-02-05 15:46:06
7020
发布2022-02-05 15:46:06
举报
文章被收录于专栏:历史专栏历史专栏

文章目录

一、订单模型数据库设计

1.数据库设计ER图

在这里插入图片描述
在这里插入图片描述

2.模型类设计

代码语言:javascript
复制
from django.db import models
from app.goods.models import SKU
from app.users.models import User, Address
from utils.models import BaseModel


class OrderInfo(BaseModel):
    """订单信息"""
    PAY_METHODS_ENUM = {
        "CASH": 1,
        "ALIPAY": 2
    }
    PAY_METHOD_CHOICES = (
        (1, "货到付款"),
        (2, "支付宝"),
    )
    ORDER_STATUS_ENUM = {
        "UNPAID": 1,
        "UNSEND": 2,
        "UNRECEIVED": 3,
        "UNCOMMENT": 4,
        "FINISHED": 5
    }
    ORDER_STATUS_CHOICES = (
        (1, "待支付"),
        (2, "待发货"),
        (3, "待收货"),
        (4, "待评价"),
        (5, "已完成"),
        (6, "已取消"),
    )
    order_id = models.CharField(max_length=64, primary_key=True, verbose_name="订单号")
    user = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name="下单用户")
    address = models.ForeignKey(Address, on_delete=models.PROTECT, verbose_name="收货地址")
    total_count = models.IntegerField(default=1, verbose_name="商品总数")
    total_amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="商品总金额")
    freight = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="运费")
    pay_method = models.SmallIntegerField(choices=PAY_METHOD_CHOICES, default=1, verbose_name="支付方式")
    status = models.SmallIntegerField(choices=ORDER_STATUS_CHOICES, default=1, verbose_name="订单状态")

    class Meta:
        db_table = "tb_order_info"
        verbose_name = '订单基本信息'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.order_id


class OrderGoods(BaseModel):
    """订单商品"""
    SCORE_CHOICES = (
        (0, '0分'),
        (1, '20分'),
        (2, '40分'),
        (3, '60分'),
        (4, '80分'),
        (5, '100分'),
    )
    order = models.ForeignKey(OrderInfo, related_name='skus', on_delete=models.CASCADE, verbose_name="订单")
    sku = models.ForeignKey(SKU, on_delete=models.PROTECT, verbose_name="订单商品")
    count = models.IntegerField(default=1, verbose_name="数量")
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="单价")
    comment = models.TextField(default="", verbose_name="评价信息")
    score = models.SmallIntegerField(choices=SCORE_CHOICES, default=5, verbose_name='满意度评分')
    is_anonymous = models.BooleanField(default=False, verbose_name='是否匿名评价')
    is_commented = models.BooleanField(default=False, verbose_name='是否评价了')

    class Meta:
        db_table = "tb_order_goods"
        verbose_name = '订单商品'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.sku.name

总结

实际中订单设计远不止这些,上面哪些只是案例流程,实际按需求设计,下面是个比较完整的设计:

1.订单表

订单表 (order)

– 自动编号(order_id, 自增长主键)

– 订单单号(order_no, 唯一值,供客户查询)

– 商店编号(shop_id, 商店表自动编号)

– 订单状态 (order_status,未付款,已付款,已发货,已签收,退货申请,退货中,已退货,取消交易)

– 商品数量 (product_count, 商品项目数量,不是商品)

– 商品总价 (product_amount_total)

– 订单金额 (order_amount_total,实际付款金额)

– 运费金额 (logistics_fee)

– 是否开箱验货 (is_unpacking_inspection)

– 是否开票(是否开具发票)

– 发票编号 (订单发票表自动编号)

– 收货地址编号 (address_id, 收货地址表自动编号)

– 订单物流编号 (orderlogistics_id, 订单物流表自动编号)

– 订单支付渠道 (pay_channel)

– 订单支付单号 (out_trade_no/escrow_trade_no,第三方支付流水号)

– 创建时间 (下单时间)

– 付款时间

– 发货时间

– 客户编号 (user_id,用户表自动编号)

– 客户备注

– 订单结算状态 (order_settlement_status,货到付款、分期付款会用到)

– 订单结算时间 (order_settlement_time)

2.订单发票表

订单发票表 (order_invoice)

– 自动编号 (invoice_id)

– 订单编号 (order_id)

– 是否增值税发票 (is_vat, 普通发票,增值发票)

– 发票抬头名称 (invoice_title)

– 发票抬头内容 (invoice_content)

– 发票金额 (invoice_amount)

– 发票税号 (invoice_tax_no)

– 开票税金 (invoice_tax)

– 公司名称[增值税] (vat_company_name)

– 公司地址[增值税] (vat_company_address)

– 联系电话[增值税] (vat_telphone)

– 开户银行[增值税] (vat_bank_name)

– 银行帐号[增值税] (vat_bank_account)

– 开票时间 (created_time)

3.订单物流表

订单物流表 (order_logistics)

– 自动编号 (orderlogistics_id)

– 订单编号 (order_id, 订单表自动编号)

– 物流单号 (express_no, 发货快递单号)

– 收货人姓名 (consignee_realname, 收货地址表可能更新或删除,因此要在这里记录)

– 联系电话 (consignee_telphone, 收货地址表可能更新或删除,因此要在这里记录)

– 备用联系电话 (consignee_telphone2, 收货地址表可能更新或删除,因此要在这里记录)

– 收货地址 (consignee_address, 收货地址表可能更新或删除,因此要在这里记录)

– 邮政编码 (consignee_zip, 收货地址表可能更新或删除,因此要在这里记录)

– 物流方式(logistics_type, ems, express)

– 物流商家编号 (logistics_id,物流商家表自动编号)

– 物流发货运费 (logistics_fee,显示给客户的订单运费)

– 快递代收货款费率 (agency_fee, 快递公司代收货款费率,如货值的2%-5%,一般月结)

– 物流成本金额 (delivery_amount, 实际支付给物流公司的金额)

– 物流状态 (orderlogistics_status)

– 物流结算状态 (logistics_settlement_status, 未结算,已结算,部分结算)

– 物流最后状态描述 (logistics_result_last)

– 物流描述 (logistics_result)

– 发货时间 (logistics_create_time)

– 物流更新时间 (logistics_update_time)

– 物流结算时间 (logistics_settlement_time)

– 物流支付渠道

– 物流支付单号

– 物流公司已对账状态 (reconciliation_status,已对账,未对账)

– 物流公司对账日期 (reconciliation_time)

4.订单退货表

订单退货表 (order_returns)

– 自动编号 (order_returns_id)

– 退货编号 (returns_no,供客户查询)

– 订单编号 (order_id, 订单表自动编号)

– 物流单号 (express_no, 退货物流单号)

– 收货人姓名 (consignee_realname)

– 联系电话 (consignee_telphone)

– 备用联系电话 (consignee_telphone2)

– 收货地址 (consignee_address)

– 邮政编码 (consignee_zip)

– 物流方式(logistics_type, ems, express)

– 物流商家编号

– 物流发货运费 (logistics_fee,退货运费)

– 物流状态 (orderlogistics_status)

– 物流最后状态描述

– 物流描述

– 物流更新时间

– 物流发货时间

– 退货类型 (returns_type, 全部退单,部分退单)

– 退货处理方式 (handling_way, PUPAWAY:退货入库;REDELIVERY:重新发货;RECLAIM-REDELIVERY:不要求归还并重新发货; REFUND:退款; COMPENSATION:不退货并赔偿)

– 退款金额 (returns_amount)

– 退货销售员承担的费用 (seller_punish_fee)

– 退货申请时间 (return_submit_time)

– 退货处理时间 (handling_time)

– 退货原因

5.订单商品详情表

订单商品详情表 (order_detail)

– 自动编号

– 订单编号

– 商品编号

– 商品名称 (product_name, 商品可能删除,所以这里要记录,不能直接读商品表)

– 商品价格 (product_price, 商品可能删除,所以这里要记录)

– 商品型号 (product_marque,前台展示给客户)

– 商品条码 (product_store_barcode, 商品仓库条码)

– 商品型号信息 (product_mode_desc,记录详细商品型号,如颜色、规格、包装等)

– 商品型号参数 (product_mode_params, JSON格式,记录单位编号、颜色编号、规格编号等)

– 折扣比例 (discount_rate 打几折)

– 折扣金额 (discount_amount)

– 购买数量 (number)

– 小计金额 (subtotal)

– 商品是否有效 (is_product_exists)

– 客户商品备注 (remark)

6.收货地址表

收货地址表 (delivery_address)

– 自动编号 (address_id)

– 用户编号 (user_id, 用户表自动编号)

– 收件人姓名 (realname)

– 联系电话 (telphone)

– 备用联系电话 (telphone2)

– 国家 (country)

– 省份 (province)

– 城市 (city)

– 地区 (area)

– 街道/详细收货地址 (street)

– 邮政编码 (zip)

– 是否默认收货地址 (is_default_address)

– 创建时间 (created_time)

7.购物车表

购物车表 (shoppingcart)

– 自动编号 (id)

– 用户编号 (user_id)

– 商店编号 (shop_id)

– 商品编号 (product_id)

– 是否有效 (is_product_exists)

– 购买数量 (number)

– 创建时间 (created_time)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-02-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、订单模型数据库设计
    • 1.数据库设计ER图
      • 2.模型类设计
      • 总结
        • 1.订单表
          • 2.订单发票表
            • 3.订单物流表
              • 4.订单退货表
                • 5.订单商品详情表
                  • 6.收货地址表
                    • 7.购物车表
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档