跳转到主要内容

z3.cform的重复数据网格(表格样)字段

项目描述

介绍

提供了一个具有数据网格(表格)的字段,其中每行都是一个子表单。

它是z3c.formProducts.DataGridField 的实现。

该产品是为与Plone和Dexterity一起使用而开发的。

https://github.com/collective/collective.z3cform.datagridfield/actions/workflows/test.yml/badge.svg

安装

将collective.z3cform.datagridfield添加到您的buildout eggs中

[buildout]
...
eggs =
    collective.z3cform.datagridfield

示例用法

此代码片段演示了一个包含表格的模式。表格的布局由第二个模式定义

from collective.z3cform.datagridfield.datagridfield import DataGridFieldFactory
from collective.z3cform.datagridfield.row import DictRow
from plone.autoform.directives import widget
from plone.autoform.form import AutoExtensibleForm
from z3c.form import form
from zope import interface
from zope import schema


class ITableRowSchema(interface.Interface):
    one = schema.TextLine(title=u"One")
    two = schema.TextLine(title=u"Two")
    three = schema.TextLine(title=u"Three")


class IFormSchema(interface.Interface):
    four = schema.TextLine(title=u"Four")
    table = schema.List(
        title=u"Table",
        value_type=DictRow(
            title=u"tablerow",
            schema=ITableRowSchema,
        ),
    )

    widget(table=DataGridFieldFactory)


class EditForm(AutoExtensibleForm, form.EditForm):
    label=u"Demo Usage of DataGridField"
    schema = IFormSchema

并通过zcml配置

<browser:page
    name="editform--example"
    class=".editform.EditForm"
    for="*"
    permission="zope2.View"
    />

它还可以从supermodel XML中调用

<field name="table" type="zope.schema.List">
  <description/>
  <title>Table</title>
  <value_type type="collective.z3cform.datagridfield.DictRow">
    <schema>your.package.interfaces.ITableRowSchema</schema>
  </value_type>
  <form:widget type="collective.z3cform.datagridfield.DataGridFieldFactory"/>
</field>

存储

数据可以存储为字典列表或对象列表。如果数据是字典列表,则value_type为DictRow。否则,value_type为‘schema.Object’。

如果您提供的是Object内容类型(而不是字典),则必须提供您自己的转换类。默认转换类返回字典列表,而不是您的对象类。请参阅示例。

配置

行编辑器处理

可以通过小部件提示传递小部件参数。上面的扩展模式示例

class IFormSchema(interface.Interface):
    four = schema.TextLine(title=u"Four")
    table = schema.List(
        title=u"Table",
        value_type=DictRow(
            title=u"tablerow",
            schema=ITableRowSchema,
        ),
    )

    widget(
        "table",
        DataGridFieldFactory,
        allow_insert=False,
        allow_delete=False,
        allow_reorder=False,
        auto_append=False,
        display_table_css_class="table table-striped",
        input_table_css_class="table table-sm",
    )

操作子表单

通过小部件提示,《DictRow》架构也可以进行扩展。以上扩展架构示例

from z3c.form.browser.checkbox import CheckBoxFieldWidget


class ITableRowSchema(interface.Interface):

    two = schema.TextLine(title=u"Level 2")

    address_type = schema.Choice(
        title="Address Type",
        required=True,
        values=["Work", "Home"],
    )
    # show checkboxes instead of selectbox
    widget(address_type=CheckBoxFieldWidget)


class IFormSchema(interface.Interface):

    table = schema.List(
        title=u"Nested selection tree test",
        value_type=DictRow(
            title=u"tablerow",
            schema=ITableRowSchema
        )
    )
    widget(table=DataGridFieldFactory)

与plone.app.registry一起工作

要使用具有plone.app.registry的字段,您必须使用其基类为PersistentField的字段版本

from collective.z3cform.datagridfield.registry import DictRow

JavaScript事件

collective.z3cform.datagridfield触发jQuery事件,因此您可以在自己的JavaScript中挂钩它们以自定义DataGridField行为。

以下事件目前正在针对table.datagridwidget-table-view触发

  • beforeaddrow [datagridfield, newRow]

  • afteraddrow [datagridfield, newRow]

  • beforeaddrowauto [datagridfield, newRow]

  • afteraddrowauto [datagridfield, newRow]

  • aftermoverow [datagridfield]

  • afterdatagridfieldinit - 页面上所有DGF都已初始化

示例用法

var handleDGFInsert = function(event, dgf, row) {
    row = $(row);
    console.log("Got new row:");
    console.log(row);
};

// Bind all DGF handlers on the page
$(document).on('beforeaddrow beforeaddrowauto', '.datagridwidget-table-view', handleDGFInsert);

演示

更多示例位于此包的演示子文件夹中。

版本

  • 版本3.x仅适用于Plone 6+(z3c.form >= 4)

  • 版本1.4.x和2.x适用于Plone 5.x

  • 版本1.3.x适用于Plone 4.3

  • 对于Python 3.7及以上,至少需要PyYAML 4.2b1

需求

  • z3c.forms

  • 支持JavaScript的浏览器

  • jQuery 1.4.3或更高版本

变更日志

3.0.2 (2023-09-11)

  • 更新JS资源。[petschki]

3.0.1 (2023-06-27)

  • 修复 readonly 字段在 DictRowConverter.toFieldValue 中的问题。[petschki]

  • 删除过时的 GridDataConverter 并使用默认的 z3c.form.converter.MultiConverter。现在它调用 DictRowConverter 并将所有列转换为它们正确的小部件/字段值。[petschki]

  • 添加 plone.restapi 的JSON反序列化器。[petschki]

3.0.0 (2022-09-28)

  • 最新的原型和 mf_config 更新。[petschki]

  • 修复通过autoform提示设置行架构时的数据转换器。[petschki]

  • 可自定义输入小部件表格CSS类。[petschki]

3.0.0a1 (2022-06-28)

  • 仅升级到Plone 6,具有最新的z3c.form和模块联邦。[petschki]

2.0.2 (2022-03-14)

  • 在将行插入DOM树后扫描并初始化行UI。应防止JS初始化错误。[thet]

  • 在创建行时克隆不带任何附加事件处理程序的行。[thet]

  • 仅对自动附加模式设置自动附加UI状态。[thet]

  • 将仅成员JavaScript与登录捆绑包合并,而不是默认捆绑包。[thet]

  • 删除未使用的 init_field.js 脚本。[thet]

  • 使用最新的配置为Github Actions和tox。添加Plone 6相关的ci和tox配置。[thomasmassmann]

2.0.1 (2021-07-28)

  • 修正注册表中的问题 #110。[agitator]

  • 修复文档。#110。[petschki]

2.0 (2021-03-29)

  • 注册新的pat-datagridfield捆绑包。

    重大更改:JavaScript资源已大量更改。请运行提供的升级步骤!

    如果您自定义了加载这些JavaScript资源的模板或自定义了JavaScript功能本身,请特别小心。捆绑包仅对已登录用户加载。

  • 重新设计JavaScript作为模式以更好地初始化。

  • 行UI按钮优化 将行UI元素从锚点更改为按钮以获得更好的语义。修复Bootstrap类,删除未使用的属性,为按钮添加标题。[thet]

  • 更改UI元素类

    从UI按钮中删除非唯一id属性并添加类。让按钮功能由模式初始化。

    重大更改

    在此版本中,一个模式处理所有JavaScript功能,以确保在datagridfield小部件的不同实例之间实现最佳可能的封装。如果您已自定义模板,请确保您执行以下操作

    • 将类 pat-datagridfield 添加到 datagridwidget-table-view 节点(datagridfield_input.pt,datagridfield_input_block.pt)。

    • 请按照以下映射(datagridfieldobject_input.pt、datagridfieldobject_input_block.pt)将以下类添加到UI按钮中,而不是ID:

      • #btn-addrow -> .dgf–row-add

      • #btn-deleterow -> .dgf–row-delete

      • #btn-moveup -> .dgf–row-moveup

      • #btn-movedown -> .dgf–row-movedown

    [thet]

  • 在模板中使用pat-datagridfield。 [thet]

  • 删除datagridfield小部件的额外参数,因为它未被使用且未经测试。 [thet]

  • 清理升级配置文件定义并使其符合Plone标准。 [thet]

  • 使用Github actions代替Travis CI。 [thet]

  • 使用bobtemplate.plone配置进行测试设置。 [thet]

  • 代码格式化 - black, zpretty, prettier。 [thet]

  • 使用模块名导入。 [ksuess]

  • 在locales目录中注册翻译。 [erral]

  • 添加es和eu翻译。 [erral]

  • 可访问性修复。 [erral]

1.5.3 (2020-03-03)

  • 修复多个datagridfields在表单中的问题。当存在多个datagrid时,会自动添加多行。修复了问题96。 [maurits]

1.5.2 (2020-01-07)

  • 修复“未知指令widgetTemplate” [agitator]

  • 修复:自动添加行。 [ksuess]

1.5.1 (2019-03-21)

  • 添加缺失的升级配置文件_to_2 [agitator]

1.5.0 (2019-03-09)

  • 添加对Python 3和Plone 5.2的支持。 [pbauer, agitator]

1.4.0 (2019-02-21)

  • 停止支持Plone 4。 [pbauer]

  • 使用Ressource-Registry(Pat-Registry),更新JS/CSS,添加卸载功能 [2silver]

  • 使用Plone5 glyphicons代替图片 [2silver]

  • 添加缺失的升级步骤,调用browserlayer设置。 [sgeulette]

  • 如果schema中提供了字段描述,则显示列描述 field.description。 [gbastien, bleybaert]

  • 在README.rst中指定,版本 >= 1.4 适用于Plone 5+,版本 < 1.4 适用于Plone 4。 [gbastien]

  • 可用性更改:在添加命令中添加一个(隐藏的)标签 [keul]

  • 与从mockup来的Plone 5 modals/overlay兼容 [keul]

1.3.1 (2019-02-21)

  • 扩展卸载配置文件。 [thet]

  • 将命令包装在A标签中,这是出于可访问性的需要(从Products.DataGridField回滚更改)。这也简化了使用纯CSS自定义图标。 [keul]

  • 用更易用的删除图标替换减号图标。 [keul]

  • 删除用于标记字段为必填的ols-school *字符。 [keul]

  • 修复对象访问问题 [tomgross]

  • 修复在子表单中使用相关项目小部件的问题 https://github.com/plone/Products.CMFPlone/issues/2446 [tomgross]

1.3.0 (2017-11-22)

  • 在单元格小部件上设置小部件模式,以支持autoform模式指令。 [jone]

  • 修复:不要尝试更新只读字段。 [jone]

  • 清理:utf8标题,isort,代码风格。 [jensens]

  • 从setup.py中删除对plone.directives.form的依赖,因为它已经不再使用。 [jensens]

  • 特性/修复:支持在DictRow中使用patternslib的小部件。 [jensens]

  • 修复:#36 从所有文档中删除grok,因为grok不再受支持。 [jensens]

  • 从z3c.form 3.2.10复制ObjectSubform的相关部分,它已在后续版本中删除。 [jensens]

  • 添加Browserlayer并使用它,同时添加卸载步骤。 [jensens]

  • 将演示包移到这里。 [jensens]

1.2 (2017-03-08)

  • 修复只读字段上的验证异常。 [rodfersou]

  • 修复在定义字段类时,block视图中的widget.klass为NonType的bug。

  • 在非自动追加模式下允许删除最后一行。 [gaudenz]

  • 在验证期间修复IChoice字段的绑定 [djay]

  • Plone 5兼容性和修复Plone 5的Travis测试 [djay]

1.1 (2014-07-25)

  • 删除依赖于firefox的JS代码。 [neilferreira]

  • 在创建新行时停止引用“事件”元素,因为触发输入内容变化的元素可能来自另一个元素。 [neilferreira]

1.0 (2014-06-02)

  • 将“form-widgets-field_id”作为小部件CSS ID(与其他小部件保持一致)。 [thomasdesvenain]

  • 修复包依赖项。 [hvelarde]

  • 在BlockDataGridField中,使用BlockDataGridFieldObject作为行。 [gaudenz]

  • 在updateWidgets中过滤掉任何自动追加或模板行。 [gaudenz]

  • 在aftermoverow JS事件中添加行参数 [gaudenz]

  • 不要重置克隆模板行的类属性 [gaudenz]

  • 在所有模板行元素中替换行索引,而不仅仅是输入元素。在克隆模板行时替换id、name、for、href和data-fieldname属性。[gaudenz]

0.15 (2013-09-24)

  • 增加了在字段显示时定义主表CSS类别的可能性。这样,您可以使用常见的Plone现有类(如“listing”)。[gbastien]

  • 修复了当页面上有多个datagrid字段时自动附加的bug。当添加一个字段时,也将“change.dgf”绑定到另一个字段。在datagridfield.js的第138行添加“$(dgf).find(..",以便仅绑定到正确的元素。[tareqalam]

  • 只有在行确实未找到时才中止moveRow,而不是行idx恰好为0时。[gaudenz]

  • 在行模式下重新索引时,也更新隐藏的数据行。此修复以前仅针对块模式完成。[gaudenz]

  • 放宽了对标记的要求,不要假设输入是表格单元格的直接子项。这使得使用自定义模板更加容易。[gaudenz]

  • 修复了IValidator API的validate函数签名。API需要一个“force”参数。[gaudenz]

  • 将SubformAdapter注册到IPloneForm层以避免plone.app.z3cform的Adapter具有优先级。[gaudenz]

0.14 (2013-05-24)

  • 将travis设置与其他包对齐。[saily]

  • 添加了新的V1 bootstrap.py。[saily]

  • 为tbody行(row-(1...n))和thead列(cell-(1...m))添加了CSS类,以便在编辑表单中提供更多样式。[saily]

  • 修复了在设置为块编辑模式时显示模式中错误的模板。[miohtama]

  • 为DataGridField添加了CSS类(widget.klass属性),以将其与其他MultiWidgets区分开来。[miohtama]

0.13 (2013-04-09)

  • 添加travis-ci配置。[jaroel]

  • 将测试转换为plone.app.testing。[jaroel]

  • 修复了与TooLongTooShort异常更好的工作方式的zope.schema.interfaces.ValidationError。[datakurre]

  • 修复了在操作<label>时IE7失败的问题。[miohtama]

  • 处理在DGF中没有行且没有可用的自动附加行的情况。[miohtama]

  • 在DOM内容加载时正确绑定DGF事件,而不是在解析JavaScript时。[miohtama]

  • 如果行不能移动,则不显示移动句柄。[miohtama]

  • 将上下移动处理程序更改为保持固定位置,以便单元格在移动时保持相同的宽度。[miohtama]

  • 修复了由嵌套DGF支持破坏的复选框保存问题。[miohtama]

  • 添加了块编辑模式。[miohtama]

  • “use strict;”和ECMAScript 5兼容的JavaScript清理。[miohtama]

  • 添加了afterrowmoved JS事件。[miohtama]

0.12 (2012-10-30)

  • 更新了空行选择。[jstegle]

  • 支持嵌套DataGridField(yo dawg…)[miohtama]

  • 支持plone.autoform和grok的行模式。[miohtama]

  • 添加了DataGridField.extra参数,因此您可以传递特定于应用程序的数据到JavaScript中。[miohtama]

0.11 (2012-05-16)

  • 能够与plone.app.registry一起使用。[vangheem]

0.10 (2012-02-12)

  • 修复了移动最后一行向上的bug。[m-martinez]

0.9 (2011-10-27)

  • 在添加新行时克隆事件 - 修复了plone.formwidget.contenttree的新行浏览按钮不起作用的问题。[anthonygerrard]

  • 重新索引克隆行的更多索引属性。[anthonygerrard]

0.8 (2011-09-24)

  • 避免使用“row”CSS类。[davisagli]

  • 修复了与jQuery 1.3.x一起工作的问题(使用.remove()而不是.detach(),以不同的方式获取数据属性,并避免实时绑定更改事件)。[davisagli]

  • 当获取FormatterValidationError时不要出错,将其传递给z3c.form。[claytron]

  • 给操作器图像提供一个相对的src而不是绝对src。这意味着在没有Plone/Zope在域名根部的网站上小部件不起作用。[davidjb]

  • 在自动插入过程中,首先将我们的新行添加到文档中,然后在重新索引它并更改其元素的ID之前。[davidjb]

  • 整理并简化自动插入功能。[davidjb]

  • 移除不必要的自动插入绑定和解除绑定,因为jQuery的< cite> live() 函数已经通过< cite> auto-append 类进行了覆盖。自动添加/移除此类对行进行操作。[davidjb]

  • 通过在JavaScript中删除特定于表格的检查来解决自动插入功能不工作的问题。[davidjb]

0.7 (2011-07-01)

  • 修改了标记/JavaScript以防止重复的HTML id属性。修改JavaScript以允许datagrid页面模板不使用表格。[dextermilo]

  • 改进CSS中的间距。[davisagli]

  • 撤销了我的修复以确保添加空白行,因为它在z3c.form中重复了修复,导致多余的行。[davisagli]

0.6 (2011-05-17)

  • 在父表单上搜索datagridInitialise和datagridUpdateWidgets,包括在fieldset中。[maurits]

  • 在plone.app.z3cform.interfaces.IPloneFormLayer上注册模板,使其优先于该包的列表小部件模板。[elro]

  • 确保即使小部件没有值,也要调用updateWidgets以添加空白行。[davisagli]

  • 当提取行值因验证错误而失败时,将小部件值转换为字段值,以便成功将值应用于网格小部件。[davisagli]

  • 为DictRow注册plone.supermodel处理程序,以便它可以在supermodel模型中使用。[davisagli]

  • 作为测试额外依赖collective.z3cform.datagridfield_demo;在测试中使用此包的浏览器视图。[maurits]

  • 导入/导出时仍然使用_validate,修复代码以便其工作[lentinj]

  • 为transmogrify.dexterity添加DictRow序列化程序[lentinj]

  • 仅在单元格中是唯一元素的单个输入单元格上使用width:100%[lentinj]

  • 在添加行时按相反顺序重新排序行索引。这意味着相邻的行暂时不共享相同的索引,例如:- 行1和2包含基于input:radio的小部件 - 添加行0,重新编号开始 - 行1的小部件重命名为2 - 两个input:radio集合共享相同的名称,一个未选中 - 行2的小部件重命名为3 - … [lentinj]

  • 使用jQuery克隆行,并克隆行上的jQuery事件[lentinj]

  • 实现了重新排序功能

0.5 (2011-02-08)

  • 放入DictRow类(感谢Martin Aspeli)

  • 将示例代码移至单独的包collective.z3cform.datagridfield_demo(感谢Laurence Rowe)。

  • 从setup.py中删除了多余的行(感谢Laurence Rowe)。

  • 删除了不必要的dexterity依赖项(感谢Laurence Rowe)。

  • 删除了不必要的grok依赖项(感谢Laurence Rowe)。

0.4 (2011-02-06)

  • 重命名了示例页面。现在起点是@@demo-collective.z3cform.datagrid。

  • 现在可以通过updateWidgets方法配置小部件。不再需要创建自定义工厂。

  • 现在可以省略列。

  • 提供一组用于对象访问的示例视图。

0.3 (2011-02-04)

  • 自动追加功能对于弹出表单未正确绑定。我切换到使用jQuery.live()而不是在文档加载时绑定。

  • 在示例页面上添加了菜单

  • 添加了仅显示表单选项。

  • 修复了main README.txt中的reStructuredText,以便在PyPI上显示得更友好。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

collective.z3cform.datagridfield-3.0.2.tar.gz (745.6 kB 查看哈希值)

上传时间 源代码

构建分发

collective.z3cform.datagridfield-3.0.2-py2.py3-none-any.whl (559.5 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面