我们在编辑产品详情时,如果有个项目是当前合同所属销售人员姓名,默认的models.py里是这么写的:
qiandingren_list = (('张三', '张三'),('李四', '李四'),('王五', '王五'),('赵六', '赵六'),('朱七', '朱七')); qiandingren = models.CharField(u"签订人", choices=qiandingren_list, max_length=200);
这样的话,如果我们又增加了新的成员,就要到源代码里再增加上去,这就比较麻烦了,一但我们交付了工程之后,这种维护会变得很繁琐,有没有更好的解决办法呢,比如直接在后台动态添加,然后这里发布时会自动关联,如果有多对多的字段方式,能实现,但是要增加新的模型和数据库信息,会导致更大的工作量,所以我们想的是在后台的某个栏目里,比如一个【默认配置】栏目里,把常用的这些内容都进行实时更新,那后期维护和操作会更顺手了。
因为models.py里的字段,choices接收的值类型是一个【二维元组】,所以这里把一个名称直接写两次,在代码里处理起来就相对容易得多,这里进行配置保存到数据库里,就相当于添加一篇文章一样简单。再到MODELS文件里,把原来的那两句代码换成下面的:
from app1.models import Product_admin,Customer_admin,Buy_admin,Genjin_admin,ProductInfo from django.db.models import Sum,Q,F #Q为多条件使用,F为多条件相乘求和 # 直接在models.py里读取默认配置的数据 2025年5月11日 17:48:14 ceshilky = ProductInfo.objects.get(id=6) ceshiage = ceshilky.age; split_data = ceshiage.split(',') # 分割字符串 original_list = split_data # 使用zip和切片来分组 tuples_list = list(zip(original_list[::2], original_list[1::2])) # 如果最后一个元组只有一个元素,可以这样处理 if len(original_list) % 2 != 0: tuples_list.append((original_list[-1],)) # 这里的CHOICES必须是一个二维元组的格式,不然就会出错,[('张三', '张三'), ('李四', '李四'), ('王五', '王五'), ('赵六', '赵六'), ('朱七', '朱七')] qiandingren = models.CharField(u"签订人", choices=tuples_list, max_length=200);
保存之后,再到后台多刷新几次,因为有缓存,所以没这么快显示出来,还不行就多等几分钟再尝试刷新,如果成功的话,应该显示是这样的了:
这样就可以实现很多这种需要更新的下拉内容了,比如下面的合同状态这里,多种状态就比较好维护了,也不用额外新建多对多模型和操作数据库,简单添加一个新的内容(类似文章内容),就能直接调用了,真是一劳永逸!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)