Django在model定义的choice元组应用在views中

本文分享了在Django Model中使用元组字段的实践经验,特别关注如何在前端展示与选择处理阶段的阶段名称,通过具体示例介绍了自定义视图方法get_context_data的运用,以及对__getitem__方法的探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在model定义时定义的元组如:

class PRTprocs(models.Model):
    C_STG=(
        (0, '需求'),
        (2, '采购'),
        (4,'到货'),
        (6, '消耗'),
        (7, '报废'),
    )
    id = models.AutoField(primary_key=True)
   ……
   stage=models.IntegerField(verbose_name="处理阶段", choices=C_STG)

在创建PRTprocs实例时,需要前台提供一个参数来确定创建实例的stage值,这个值不可编辑,且需要在前台显示stage对应的阶段名称。
在各种搜索没有找到满意答案,所以自己用了一个本办法

class PRTproc_addview(PermissionRequiredMixin,generic.CreateView):
……
    def get_context_data(self, **kwargs):
        if 'form' not in kwargs:
            kwargs['form'] = self.get_form()
        mystg=int(self.request.GET.get('stg','-1'))#获取阶段码
        for stgc in PRTprocs.C_STG:
            if stgc[0] == mystg:
                mytit = stgc
        kwargs['objtitle'] = '创建印刷品的“'+mytit[1]+" ”记录信息:"
……

这里使用mytit来记录与前端传值stg相等的元组元素,并使用mytit[1]来获取显示信息。

另外,还可以使用__getitem__方法,
mytit = PRTprocs.C_STG.getitem(mystg)
但是这个函数没有仔细研究,mystg应该是作为index参数来匹配了,例如我前端传递2时获取的是“到货”而不是我想要的“采购”。其实如果我前台提交序号值,应该就能用这个办法了。但是如果是多人开发时,估计伙伴不愿意自己去数序号吧……本着问题能解决就行的原则,我没有继续研究。有兴趣的朋友可以自己研究一下,应该是比较快捷的方法。
另外,如果有时间看一下django源码中的get_xxx_display方法,应该还能找到更好的解决办法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值