定义模型类
from django.db import models
from users.models import *
from goods.models import *
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'
class OrderInfo(models.Model):
PAY_METHOD = (
(1, '支付宝'),
(2, '微信支付'),
(3, '银联支付'),
(4, '货到付款')
)
STATUS = (
(1, '待支付'),
(2, '代发货'),
(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)
treight = 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'
class OrderGood(models.Model):
SCORE = (
(1, '20分'),
(2, '40分'),
(3, '60分'),
(4, '80分'),
(5, '100分')
)
sku = models.ForeignKey(SKU, 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'
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 f'交易{self.trade_id}'
class Meta:
db_table = 'pay_info'
定义序列化器
from rest_framework import serializers
from orders.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.response import Response
from orders.models import *
from orders.serializers import *
from goods.serializers import *
class OrderInfoViewSet(ModelViewSet):
queryset = OrderInfo.objects.all()
serializer_class = OrderInfoSer
lookup_field = 'pk'
lookup_url_kwarg = 'pk'
def retrieve(self, request, *args, **kwargs):
order = self.get_object()
order_ser = self.get_serializer(order)
order_goods = order.goods.all()
order_goods_ser = OrderGoodSer(order_goods, many=True)
temp_list = []
for i in order_goods_ser.data:
i['sku'] = SKUSer(SKU.objects.filter(id=i.get('sku')).first()).data
temp_list.append(i)
order_dict = order_ser.data
order_dict['skus'] = temp_list
return Response(order_dict)
路由
from django.urls import path
from rest_framework.routers import DefaultRouter
from orders import views
router = DefaultRouter()
router.register('orderInfo', views.OrderInfoViewSet)
urlpatterns = []
urlpatterns += router.urls
展示搜索的订单对象为
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3b4f64a36422310bc87b10adbadedc26.png)
前端展示时间,两种方法
- 表格渲染时间
<el-table-column prop="created_time" label="创建时间" :formatter="formatDate"> </el-table-column>
methods: {
formatDate(row, col){
let value = row[col.property]
if (!value){return}
let myDate = new Date(value)
return myDate.getFullYear() + '-' + (myDate.getMonth()+1) + '-' + myDate.getDate()
+ ' ' + myDate.getHours() + ':' + myDate.getMinutes() + ':' + myDate.getSeconds()
}
}
- 直接渲染
时间:{{ oOrder.created_time | formatDate }}
filters:{
formatDate(value){
if (!value){return}
let myDate = new Date(value)
return myDate.getFullYear() +'-'+ (myDate.getMonth()+1) +'-'+ myDate.getDate() +' '+
myDate.getHours() +":"+ myDate.getMinutes() +":"+ myDate.getSeconds()
},