在 django模型中封装元组和字典, 字段中使用chioce参数实现数据的一一对应
一.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()
简单来说就是在数据库中保存一个代号, 然后根据这个代码在模型中找到对应的参数, 实现已经在模型中将代号和参数一一对应的关系进行了定义
当我仰望星空, 看见了涛涛江水, 闻到了人声鼎沸;可当我蓦然回望,再也触摸不到那逝去的时光,再也看不到那夕阳下的少年!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗