31 ModelForm常用功能--扩充
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常用功能--扩充的更多相关文章
- python3 字符串与列表常用功能
一.字符串常用功能 1. capitalize(),将字符串的首字母变成大写,其余全部置为小写:如果字符串中有多个单词,也只是将第一个单词的首字母置为大写:例: >>> name = ...
- 开源三维地球GIS引擎Cesium常用功能的开发
Cesium是一个非常优秀的三维地球GIS引擎(开源且免费).能够加载各种符合标准的地图图层,瓦片图.矢量图等都支持.支持3DMax等建模软件生成的obj文件,支持通用的GIS计算:支持DEM高程图. ...
- Fiddler抓取https请求 & Fiddler抓包工具常用功能详解
Fiddler抓取https请求 & Fiddler抓包工具常用功能详解 先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...
- C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
- mybatis常用功能总结
mybatis-plus常用功能总结-以User表为例 1.数据库 id name age email create_time update_time version deleted 1 mary 2 ...
- Nginx实战部署常用功能演示(超详细版),绝对给力~~~
前言 上次分享了一些开发过程中常用的功能,但如果到真实环境中,其实还需要一些额外的配置,比如说跨域.缓存.配置SSL证书.高可用等,老规矩,还是挑几个平时比较常用的进行演示分享.上篇详见Nginx超详 ...
- WebStorm 常用功能的使用技巧分享
WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大 ...
- AVA正则表达式4种常用功能
正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: String str="abc efg ABC"; Str ...
- [转]WebPack 常用功能介绍
概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...
- FastReport.Net 常用功能总汇
一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要的报表.系统在打印处理时,先按主报表打印,当碰到 ...
随机推荐
- 记录一次antd升级到最新版本,与现有代码冲突导致的问题
背景:发版的前一夜,测试突然发现项目某个功能点击弹框会导致整个页面直接空白,立即提了个单要我赶紧修复.(内心真是一万个卧槽)本来准备不加班的.没办法,那只能解决.第一步就怀疑是不是谁动了代码,毕竟一两 ...
- 使用nodejs中遇到的问题
1.post请求必须使用express的一个中间件body-parser一下不然req.body会一直为空 2.node.js这种东西后端跨域就行,前端就别跨域了,不然会一直报错 3.sql语句那个s ...
- MybatisPlus #{param}和${param}的用法详解
作用 mybatis-plus接口mapper方法中的注解(如@Select)或者xml(如)传入的参数是通过#{param}或者${param}来获取值. 区别 1.解析方式: #{param}:会 ...
- WebSocket 使用记录
WebSocket 主要解决的问题是 后端数据更新主动像前端推送数据所需依赖<dependency> <groupId>org.springframework.boot< ...
- clear_buff-cache.sh
#! /bin/bash sync;echo 1 > /proc/sys/vm/drop_caches # 表示清除pagecache sync;echo 2 > /proc/sys/vm ...
- 微信小程序监听view到顶部的高度
view style='width:100%;height:80rpx;' id='navigation'></view> wx.createSelectorQuery().sele ...
- k8s_使用k8s部署博客系统-PV PVC(二)
PV和PVC PV(PersistentVolume)在声明的时候需要指定大小和续写模式:["ReadWriteMany","ReadWriteOnce",&q ...
- php echo print
echo print都是语言结构,都不是函数,但echo没有返回值,print有. echo print
- GuzzleHttp示例
一般请求 $httpClient = new Client([ 'timeout' => 5 ]); $request = $httpClient->post("http://l ...
- vue element-ui form验证中自定义验证方式通过不返回true问题
项目中使用了element-ui的form验证,自定义了手机号的验证规则,验证不通过的时候定义了callback()扔出错误.但是忘了写通过的callback().导致form验证通过拿不到返回的va ...