tri.form是一个表单库
tri.form的Python项目详细描述
三.形式
tri.form是django和flask的可选表单库。它的灵感来源于标准的django表单,并源于它的挫败感。
与django表单相比的主要功能:
- 支持跨表/对象边界的语法,类似于django对queryset的处理。
-
发送一个可调用的,该可调用的值经过后期计算以确定是否应显示字段(
show
)。这对于向管理员显示稍有不同的表单非常方便,例如。 - 轻松配置,无需编写只在一个地方使用的整个类。
示例
您可以创建
表单的子类
…
classUserForm(Form):name=Field.text()username=Field.text(is_valid=lambdaform,field,parsed_data:parsed_data.startswith('demo_'))is_admin=Field.boolean(show=lambdaform,field:form.request.user.is_staff,# show only for stafflabel_template='tweak_label_tag.html')defedit_user_view(request,username):form=UserForm(request=request)user=User.objects.get(username=username)ifform.is_valid()andrequest.method=='POST':form.apply(user)user.save()returnHttpRedirect('..')returnrender(template_name='edit_user.html',context_instance=RequestContext(request,{'form':form}))
<!-- edit_user.html --><formaction=""method="post">{% csrf_token %} <div><table> {{ form }} </table></div><inputtype="submit"value="Save"/></form>
或者用
字段
列表实例化
表单并直接使用:
defedit_user_view(request,username):form=Form(fields=[Field.text(name='name',is_valid=lambdaform,field,parsed_data:parsed_data.startswith('demo_')),Field.text(name='username'),Field.boolean(name='is_admin',show=lambdaform,field:form.request.user.is_staff,# show only for stafflabel_template='tweak_label_tag.html',)])# rest of view function...
您还可以从django模型自动生成表单(但仍然可以更改行为!).以上示例
相当于:
defedit_user_view(request,username):form=Form.from_model(request.POST,User,# the field 'name' is generated automatically and we are fine with the defaultsusername__is_valid=lambdaform,field,parsed_data:parsed_data.startswith('demo_'),is_admin__label_template='tweak_label_tag.html',is_admin__show=lambdaform,field:form.request.user.is_staff)# show only for staff# rest of view function...
或者更好:使用tri.form.views.create_或_edit_对象
:
defedit_user_view(request,username):returncreate_or_edit_object(request,model=User,is_create=False,instance=User.objects.get(username=username),form__username__is_valid=lambdaform,field,parsed_data:parsed_data.startswith('demo_'),form__is_admin__label_template='tweak_label_tag.html',form__is_admin__show=lambdaform,field:form.request.user.is_staff)# show only for staff# no html template! tri.form has a nice default for you :P
tri.form预打包作为"快捷方式"的常用字段类型的默认设置集。一些例子包括
field.boolean
,
field.integer
和
field.choice
。快捷方式的完整列表可以在field的api文档中找到。
运行测试
您需要安装TOX,然后只需进行测试
许可证
更改日志
7.0.0(2019-06-10)
-
将包从
tri.form
重命名为
tri-u form
。这是一个突破性的变化
-
放弃python2支持
-
放弃了对django<;2.0的支持
6.0.2(2019-06-03)
-
将
parse_emtpy_string_as_none
的默认值更改为基于模型字段
null
属性。
-
不应过早覆盖默认值
-
field.choice
现在有一个正常的默认解析器,使用
choice\u to\u选项
-
更改了render属性以防止您犯一些常见错误
-
修正了时间渲染值
-
修正并改进了from_model_expand的测试
-
修正了django
textfield
的模型中的
。应该是
字段。textarea
,而不是
字段。text
6.0.1(2019-05-06)
-
修复了from_model在继承时丢失类型的情况
6.0.0(2019-04-12)
-
使快捷方式与子类化兼容。以前的修复方法并没有完全起作用。
-
使用新的major tri.declarative和update来遵循类成员快捷方式的新样式
-
主要修正了如何从模型
工作。子类化it>字段
现在工作正常。这是一个突破性的变化。
-
删除了
字段。逗号分隔的快捷方式。这是从未使用过的,而且测试很差。
5.4.0(2019-04-01)
-
使
字段
快捷方式与子类化兼容
5.3.1(2019-03-20)
-
修正django的doesnotexist事件不会泄漏字段验证代码
5.3.0(2019-02-18)
-
如果您子类表单,则此自定义类现在可以在from_model的
代码路径中正确使用。
-
form
现在有一个可加细的属性
field_class
如果您有子类的话,应该使用它来指向您的
field
子类。这最好在继承自
form
的类的
meta
类中完成。
-
添加了
表单。创建或编辑对象
如果您有子类,它将尊重您的子类。
5.2.2(2019-01-28)
-
修正了5.2.0中引入的转义错误:如果在属性中有
{
和
}
,则可能会发生keyerror崩溃。
5.2.1(2019-01-16)
-
固定覆盖构建(这也破坏了travis构建,因此破坏了pypi发布过程)
5.2.0(2019-01-16)
-
"提交"按钮的呈现现在是一个链接,您现在可以在这里提供自己的按钮和链接。
-
修复了某些情况下渲染字段中的崩溃。这是由于不正确地使用了
format\u html
-
烧瓶和Jinja2支架
-
更新了Modern Django的示例,并添加了一个示例
-
在字段上更新attrs渲染(这会引入一些抨击)
-
渲染属性支持样式属性。这意味着您现在可以执行
链接(attrs\u style\uu display="none")
例如。
5.1.1(2018-10-23)
-
文件字段试图在表单验证错误时呈现二进制内容。这是Django 2.1的崩溃
-
在与
>遍历外键关系时,已断开
5.1.0(2018-10-09)
-
放弃了对django 1.8的支持
-
修正了Django 2.0的折旧警告
5.0.12(2018-10-03)
-
添加了
字段。boolean三态
用于编辑允许空值的布尔字段
5.0.11(2018-09-21)
-
简化的
缺少
定义
5.0.10(2018-06-29)
-
修复链接属性的计算
5.0.9(2018-06-19)
-
修正了python3版本检查的兼容性。
-
修复了对浅git克隆的释放检查
5.0.8(2018-06-19)
-
固定释放功能
5.0.7(2018-06-18)
-
阶梯式三重声明依赖。
5.0.6(2018-06-15)
-
修复多个选项字段上的不可编辑模式。
-
成员路径的模型支持。
-
使
链接
属性在表单参数上变懒。
5.0.5(2018-04-11)
-
修正表单提交链接呈现。
5.0.4(2017-10-16)
-
在
字段上还原新的默认分析器。选择
5.0.3(2017-10-16)
-
改进
字段上的默认解析器实现。对于
选项中的对象来说,
的合理实现就足够了。
-
固定评估顺序,以便在f对雅思成绩进行评估。(
field.show
仍在早期调用)
5.0.2(2017-10-06)
-
field.from_model
生成的外键分析器不正确。
5.0.1(2017-09-15)
-
编辑对象时正确检查唯一约束
-
在
form
构造函数中设置
form.instance
的错误太晚,导致在某些lambdas中
attributeerror
5.0.0(2017-08-22)
-
重构为使用新的tri.declarative:using
refinableobject
,
shortcut
,and the new
call_target
parameter of
namespace
-
将调度分隔符从
\/cite>更改为
/
-
将
字段上的
标签
更改为
显示名称
。这与tri.query和tri.table一致。
-
field.choice
错误地处理后验证(修复github问题9)
-
表单
现在不尝试从show=false的字段中读取初始数据和表单数据
-
创建或编辑对象
不再使用参数
呈现上下文
,使用
呈现上下文
-
如果您给它一个
queryset
作为
选项,则不再需要指定
模型
参数来
选项集
或
多选项集
(而不是提供一个可调用的)
-
field.choice\u queryset
和
field.multi\u choice\u queryset
现在重新评估每次使用的queryset(修复tri.table github问题16)
4.10.1(2017-06-20)
-
错误修复:
在保存时
为
创建或编辑对象的回调
缺少
窗体
参数
4.10.0(2017-06-12)
-
修复了当其他命名空间窗体出现错误时未呈现命名空间窗体的错误
4.9.0(2017-05-31)
-
在有多个表单的情况下,将属性"name"添加到表单以便命名空间帖子
4.8.0(2017-05-23)
-
在
表单上添加了有用的返回值。apply(…)
-
提高
字段的repr
-
添加了用于同时设置所有字段的可编辑设置
4.7.1(2017-04-24)
-
端点分派的错误修复:必须允许结果为空列表/dict
4.7.0(2017-04-24)
-
添加了链接类,并根据链接重新定义了表单上的提交按钮
-
修正了django在1.10之前和之后对模板呈现和requestcontext的错误处理
-
放弃对django 1.7的官方支持
-
在
表单中添加了
attrs
成员,并添加了用于将属性呈现为html的
render\u attrs
方法
-
添加了6作为依赖项
4.6.2(2017-04-18)
-
固定
render\u attrs
以转义引号
4.6.1(2017-04-11)
-
修复了不可编辑的字段,以便可以覆盖渲染
-
修正了当字段出现错误时发送原始数据以呈现值的错误
4.6.0(2017-03-15)
-
字段
类现在继承自
对象
,使实现更像pythonic。
(在构造函数调用中仍然可以重写属性,请参见
namespaceawareobject
)
-
为自定义数据添加了
form.extra
命名空间。
4.5.0(2016-12-19)
-
在属性到
字段
定义以启用django文件下载的自定义处理
4.4.0(2016-12-13)
-
在保存后将窗体上的实例设置为能够在重定向中使用新创建的主键
4.3.1(2016-12-08)
-
防止代码在导入时运行
4.3.0(2016-10-20)
-
延迟评估选定的选项。
4.2.0(2016-10-06)
-
添加
端点
命名空间到
窗体
和
字段
构造函数以添加自定义端点回调。
-
添加配置和验证端点实现
4.1.0(2016-09-20)
-
修正当存在多个字段错误时表单字段错误输出的格式设置
-
修正表单验证中的错误,在值错误的选项(如0)中缺少"信令所需"字段
-
在save in forms/views.py上实现djangos唯一性验证
-
固定url字段上的输入类型
4.0.0(2016-09-14)
-
改进了对模型的处理。现在您可以无问题地执行以下操作:
form=Form.from_model(field__foo__class=Form.integer)
-
参数
db_field
到
form.fields_from_model
已重命名为正确的
字段
-
参数
db_field
to
create_members_from_model
已被重命名为
member_params_by_member_name
-
更好的逻辑来确定我们在发布时所处的模式
-
允许
无
作为
端点调度前缀
3.8.0(2016-09-12)
-
修复了
创建或编辑对象中的命名空间分派错误
3.7.0(2016-08-17)
-
与Django 1.9&1.10兼容
3.6.0(2016-08-16)
-
field.datetime在接收的格式上更为宽容:它不接受ISO8601格式,但缺少秒或秒+分钟
-
field.boolean字段不符合指定的输入模板
-
解析为列表的输入(字段是列表)现在可以正常工作:无输入不会传递给验证函数。
-
修复了文档的pypi呈现
-
更多诚实的保险号码
3.5.0(2016-06-16)
-
添加
is_full_form
参数到form以可选地控制"-"="-"标记表单字段的呈现
3.4.0(2016-06-15)
-
在缺少django模型映射时添加了更好的错误消息
-
固定从初始值填充只读字段
3.3.0(2016-06-02)
-
错误修复
3.2.0(2016-05-26)
-
默认"帮助"文本不应在无效引用时爆炸
-
删除了一些死代码
3.1.0(2016-05-26)
-
修复了field.text到field.textarea的混乱命名问题
-
支持ajax后端。字段的新参数:endpoint_path和endpoint_dispatch。目前只为field.choice_queryset实现,并为select2定制。要使用它:指定template_name='tri_form/choice_select2.html'。
3.0.0(2016-05-26)
-
引入解析模式。这将修复部分提交表单的验证,使用tri.form解决筛选器和其他问题。
-
重构为使用tri.declarative@dispatch
-
添加了终结点处理。这对于使用ajax而不是预先加载选项非常有用。
-
form.errors现在是一个集合
-
views.create_object/edit_object/create_或编辑_object现在是默认参数r_to_响应,而不是render_to_字符串。这是一个潜在的制动变化。
2.2.0(2016-04-25)
-
自动字段模型处理中字段的小错误修复
2.1.0(2016-04-20)
-
修正django模型时django模型中字段的断开空白字段值
空白设置为真。
2.0.0(2016-04-18)
-
将form.from_model method更改为需要在
field_uuu
命名空间下的数据库字段kwargs。这是一个突破性的变化。
-
修复了在django create视图中保存外键的问题
-
在声明的字段和类meta中启用混合列定义。
1.16.0(2016-04-15)
-
在python 2中修复表模式渲染
1.15.0(2016-04-08)
-
固定单选按钮渲染
1.14.0(2016-04-01)
-
增加了Python3支持
-
添加了供tri.table等人重用的渲染助手函数
1.13.0(2016-03-10)
-
将多个字段修复为一个字段
1.12.0(2016-03-03)
-
添加对django 1.8的支持
1.11.0(2016-02-29)
-
用于不通过窗体进行完全往返的日期时间字段(它们输出
毫秒后,分析失败)field.file不存在。
-
更改了指定HTML属性和类的语法。他们现在正在使用
与其他事物相同的处理方式,例如:
field.choice(attrs_u foo="bar",attrs_u class_u baz=true)将产生一些结果
像
<;选择…class="baz"foo=bar>;…<;/选择>;
1.10.0(2016-02-08)
-
确保表单验证只运行一次
-
固定输入窗体类和呈现上下文以创建或编辑对象视图
1.9.0(2016-01-15)
-
固定字段属性的默认值初始化为不重用容器。
-
为模型对象生成窗体时添加了对ManyToManyField的支持。
-
添加了"read_from_instance"和"write_to_instance"回调,用于自定义实例编组。
1.8.0(2016-01-13)
错误修复版本。
-
在禁止表单订单自定义的字段中添加了缺少的"after"属性
-
固定了"attr"的默认值处理,当不应读取任何属性时,将"none"设为有效值。
-
修正了对必需字段的css处理。
1.7.0(2016-01-13)
-
即使没有其他选择,对选择的评估也会变懒。