建立訂單資料庫表
生成的訂單資料要做持久化處理,而且需要在《我的訂單》頁面展示出來。
訂單資料庫表分析
訂單号不再采用資料庫自增主鍵,而是由後端生成。
一個訂單中可以有多個商品資訊,訂單基本資訊和訂單商品資訊是一對多的關系。
訂單模型類遷移建表
orders/ models.py
from django.db import models
from utils.models import BaseModel
from users.models import User, Address
from goods.models import SKU
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