在 django模型的中封装元组和字典, 字段中使用chioce参数实现数据的一一对应

时间:2021-05-11 11:40:25

一.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()

 简单来说就是在数据库中保存一个代号, 然后根据这个代码在模型中找到对应的参数, 实现已经在模型中将代号和参数一一对应的关系进行了定义