一.models.py中
class OrderInfo(BaseModel): '''订单模型类'''
# 封装一个字典, 便于在视图中取值, 进行比对 PAY_METHODS = { 1: "货到付款", 2: "微信支付", 3: "支付宝", 4: '银联支付' } # 这是一个元组里面嵌套元组,里面的元组有两个元素, 一个作为索引, 一个作为值, 和字典里面的数据相对应 PAY_METHOD_CHOICES = ( (1, '货到付款'), (2, '微信支付'), (3, '支付宝'), (4, '银联支付') )
ORDER_STATUS = { 1:'待支付', 2:'待发货', 3:'待收货', 4:'待评价', 5:'已完成' } ORDER_STATUS_CHOICES = ( (1, '待支付'), (2, '待发货'), (3, '待收货'), (4, '待评价'), (5, '已完成') ) order_id = models.CharField(max_length=128, primary_key=True, verbose_name='订单id') user = models.ForeignKey('user.User', verbose_name='用户') addr = models.ForeignKey('user.Address', verbose_name='地址')
# 自己定义的元组 pay_method = models.SmallIntegerField(choices=PAY_METHOD_CHOICES, default=3, verbose_name='支付方式') total_count = models.IntegerField(default=1, verbose_name='商品数量') total_price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品总价') transit_price = models.DecimalField(max_digits=10, decimal_places=2,verbose_name='订单运费')
# 自己定义的元组 order_status = models.SmallIntegerField(choices=ORDER_STATUS_CHOICES, default=1, verbose_name='订单状态') trade_no = models.CharField(max_length=128, default='', verbose_name='支付编号') class Meta: db_table = 'df_order_info' verbose_name = '订单' verbose_name_plural = verbose_name
二.在视图views.py中进行取值和重新赋值的方式如下
取值
try: order = OrderInfo.objects.get(order_id=order_id, user=user)
except OrderInfo.DoesNotExist: # 当路径匹配中使用了分组的并且命名的参数, 就应该使用 kwargs = {} 字典中写上分组的名字(键)和值 return redirect(reverse('user:order', kwargs={'page': 1})) # 获取订单的支付状态名称 order.order_status 得到是对应的索引值 再通过字典取值的方式获取数据 order_status_name = OrderInfo.ORDER_STATUS[order.order_status]
重新赋值
order.order_status = 4 # 待评价 order.save()
简单来说就是在数据库中保存一个代号, 然后根据这个代码在模型中找到对应的参数, 实现已经在模型中将代号和参数一一对应的关系进行了定义