ModelForm自定义字段的显示效果

class ChargeModelForm(BootStrapModelForm, forms.ModelForm):
# 静态变量
# charge_type = forms.ChoiceField(
# label='类型',
# choices=[(1, '充值'), (2, '扣款')], # 只适合固定的数据,不适合去数据表中获取数据(注意:此方式前端提交的数据为str类型)
# )
charge_type = forms.TypedChoiceField(
label='类型',
choices=[(1, '充值'), (2, '扣款')],
coerce=int # 获取值之后会自动将数据转换成int类型
) class Meta:
model = models.TransactionRecord
fields = ['charge_type', 'amount'] # def __init__(self, *args, **kwargs):
# super().__init__(*args, **kwargs)
# # 每次实例化就重新调用该方法(注意:此方式前端提交的数据为int类型)
# self.fields['charge_type'].choices = [(1, '扣款'), (2, '充值')]
def customer_charge(request, pk):
queryset = models.TransactionRecord.objects.filter(customer_id=pk, customer__active=1).order_by('-id') pager = Pagination(request, queryset)
form = ChargeModelForm() return render(request, 'customer_charge.html', {'pager': pager, 'form': form})
class TransactionRecord(models.Model):
"""交易记录"""
charge_type_class_mapping = {
1: 'success',
2: 'danger',
3: 'default',
4: 'info',
5: 'primary',
}
charge_type_choices = ((1, '充值'), (2, '扣款'), (3, '创建订单'), (4, '删除订单'), (5, '撤单'))
charge_type = models.SmallIntegerField(verbose_name='类型', choices=charge_type_choices) customer = models.ForeignKey(verbose_name='客户', to='Customer', on_delete=models.CASCADE)
amount = models.DecimalField(verbose_name='金额', default=0, max_digits=10, decimal_places=2) creator = models.ForeignKey(verbose_name='管理员', to='Administrator', on_delete=models.CASCADE, null=True, blank=True)
order_oid = models.CharField(verbose_name='订单号', max_length=64, null=True, blank=True, db_index=True) create_datetime = models.DateTimeField(verbose_name='交易时间', auto_now_add=True)
memo = models.TextField(verbose_name='备注', null=True, blank=True)

ModelForm返回数据的问题处理

问题1:返回页面数据是对象的解决方式

在models 中,配置相应表的 __str__ 方法的返回值

问题2:返回的数据,个别的字段需要过滤条件,怎么解决?

方式1:在需要过滤条件models表中的字段中,配置如下

level = models.ForeignKey(verbose_name='级别', to='Level', on_delete=models.CASCADE, limit_choices_to={"active": 1})

方式2:在ModelForm中,写 init 方法

class CustomerModelForm(BootStrapModelForm, forms.ModelForm):
class Meta:
model = models.Customer
fields = ['username', 'mobile', 'password', 'level'] def __init__(self, request, *args, **kwargs):
super().__init__(*args, **kwargs)
# data = request.GET.get('xxx') # 该获取的参数是扩展,可以在实例化对象时,传入request参数
self.fields['level'].queryset = models.Level.objects.filter(active=1) def customer_add(request):
form = CustomerModelForm() # 有需要动态获取值的,在这里传入request参数
return render(request, 'form2.html', {'form': form})

问题3:返回choices字段,只取个别的值

class ChargeModelForm(BootStrapModelForm, forms.ModelForm):
# 方式1:
creator = forms.ChoiceField(
label='管理员',
choices=models.Administrator.objects.filter(ig__gt=1).values_list('id', 'username')
) class Meta:
model = models.TransactionRecord
fields = ['creator'] def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 每次实例化就重新调用该方法(注意:此方式前端提交的数据为int类型)
# 方式2:
self.fields['charge_type'].choices = models.Administrator.objects.filter(ig__gt=1).values_list('id', 'username')

31 ModelForm常用功能--扩充的更多相关文章

  1. python3 字符串与列表常用功能

    一.字符串常用功能 1. capitalize(),将字符串的首字母变成大写,其余全部置为小写:如果字符串中有多个单词,也只是将第一个单词的首字母置为大写:例: >>> name = ...

  2. 开源三维地球GIS引擎Cesium常用功能的开发

    Cesium是一个非常优秀的三维地球GIS引擎(开源且免费).能够加载各种符合标准的地图图层,瓦片图.矢量图等都支持.支持3DMax等建模软件生成的obj文件,支持通用的GIS计算:支持DEM高程图. ...

  3. Fiddler抓取https请求 & Fiddler抓包工具常用功能详解

    Fiddler抓取https请求 & Fiddler抓包工具常用功能详解   先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...

  4. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  5. mybatis常用功能总结

    mybatis-plus常用功能总结-以User表为例 1.数据库 id name age email create_time update_time version deleted 1 mary 2 ...

  6. Nginx实战部署常用功能演示(超详细版),绝对给力~~~

    前言 上次分享了一些开发过程中常用的功能,但如果到真实环境中,其实还需要一些额外的配置,比如说跨域.缓存.配置SSL证书.高可用等,老规矩,还是挑几个平时比较常用的进行演示分享.上篇详见Nginx超详 ...

  7. WebStorm 常用功能的使用技巧分享

    WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大 ...

  8. AVA正则表达式4种常用功能

    正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: String str="abc efg ABC";  Str ...

  9. [转]WebPack 常用功能介绍

    概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...

  10. FastReport.Net 常用功能总汇

    一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要的报表.系统在打印处理时,先按主报表打印,当碰到 ...

随机推荐

  1. go开发框架推荐

    根据自己了解的情况,从易用性和文档完善程度来说,推荐优先考虑使用如下框架: fiber revel echo iris gin beego 以revel作为入门教程,在go项目的根文件夹里执行下面2条 ...

  2. vue教程

    vue教程 环境搭建 nodejs下载 nodejs官网 已经"下一步式安装"过, 本地电脑历史版本 Mac更新到官网最新版本 # 1.先查看本机node.js版本: node - ...

  3. vm-linux-格式化磁盘以及挂载

    数据盘大小20g 文件系统xfs 分区工具fdisk 1,虚拟机关机状态,打开设置新添加一个20g硬盘 2,重新启动虚拟机,并登陆linux,打开命令窗口 3,对磁盘进行分区 输入 fdisk -l ...

  4. ubuntu usb network card drive

    通过 lsusb -t命令查看网卡型号 /: Bus 02.Port 1: Dev 1, class="root_hub", Driver=xhci_hcd/4p, 5000M | ...

  5. 修改 npm 全局模块及模块缓存存放位置

    说明 npm 全局模块安装将包安装到 C:\Users\%user%\AppData\Roaming\npm 目录下,缓存则放于 C:\Users\%user%\AppData\Roaming\npm ...

  6. 线上服务Java进程假死快速排查、分析

    引用 https://zhuanlan.zhihu.com/p/529350757 最近我们有一台服务器上的Java进程总是在运行个两三天后就无法响应请求了,具体现象如下: 请求业务返回状态码502, ...

  7. python单机版自动化测试框架源代码(selenium+Appium+requests+unittest+Excel用例+HTMLTestRunner报告)

    一.自动化测试框架: 1.框架和项目源代码下载 https://gitee.com/rmtic/autoTest 说明:框架可以支持web界面UI.安卓Android,ios苹果.接口API等自动化测 ...

  8. 【Chrome】Chrome浏览器设置深色背景

    操作步骤 1.浏览器地址栏输入:chrome://flags 2.搜索:dark mode 3.将Auto Dark Mode for Web Contents选项设置为Enable

  9. gin web 2

    routers/router.go package routers import ( "github.com/gin-gonic/gin" "gin-blog/pkg/s ...

  10. re的finditer()

    在前面学习了findall()函数,它可以一次性找到多个匹配的字符串,但是不能提供所在的位置,并且是一起返回的,如果有数万个一起返回来,就不太好处理了,因此要使用finditer()函数来实现每次只返 ...