从 wagtailstreamforms 中删除内置字段
Removing built-in fields from wagtailstreamforms
我正在尝试从 wagtailstreamforms 管理页面中删除日期、时间和多选字段,这样它们就不能在站点范围内以任何形式使用。
我试过调用 register('<field_name>', None)
来摆脱它,但这不起作用:
# wagtailstreamforms_fields.py
from wagtailstreamforms.fields import register
@register('date', None)
@register('time', None)
@register('multiselect', None)
并创建一个 AppConfig 来手动清除条目的 wagtailstreamforms.fields._fields 字典,但这似乎也不起作用。我已确保此 AppConfig 是在 wagtailstreamforms 之后加载的应用程序的一部分。
class UpdatedConfig(AppConfig):
name = 'my_new_app'
def ready(self):
from wagtailstreamforms.fields import _fields
_fields.pop('date')
_fields.pop('datetime')
_fields.pop('multiselect')
for x in _fields.keys():
print('{}: {}'.format(x, _fields[x]))
有什么方法可以做到这一点吗,hacky 或其他?我正在使用 Wagtailstreamforms 3.1 和 Wagtail 版本 2.2.2。
{% for child_block in child_blocks.list %}
{% if child_block.name != "date" and child_block.name != "datetime" and child_block.name != "multiselect" %}
<li><button type="button" class="button action-add-block-{{ child_block.name }} icon icon-{{ child_block.meta.icon }}"><span>{{ child_block.label }}</span></button></li>
{% endif %}
{% endfor %}
我是 wagtailstreamforms 的作者并且遇到了这个。限制从包中加载哪些默认表单字段的能力是个好主意。
我建议不要从寄存器方法加载它们,而是从设置字典加载它们,即:
WAGTAILSTREAMFORMS_DEFAULT_FIELDS = {
'singleline': 'wagtailstreamforms.fields.SingleLineTextField',
'multiline': 'wagtailstreamforms.fields.MultiLineTextField',
'dropdown': 'wagtailstreamforms.fields.DropdownField'
}
默认为所有内部字段。这样它就可以很容易地被覆盖。我们将保留 register
装饰器,以免破坏任何东西。
https://github.com/AccentDesign/wagtailstreamforms/pull/110
请在 pr 或 open issue 上留下任何意见/建议。如果您对此感到满意,将更新文档、合并、发布然后可以将其修改为答案。
干杯,斯图
我们可以通过将以下代码放入应用程序的 wagtailstreamforms_fields.py
来获得所需的内容
# wagtailstreamforms_fields.py
from wagtailstreamforms.fields import _fields
if _fields.get('date'):
del(_fields['date'])
if _fields.get('datetime'):
del(_fields['datetime'])
if _fields.get('multiselect'):
del(_fields['multiselect'])
所以我猜你可以说它是上述两种方法的混合体。它可能在不久的将来会过时,请参阅 Stuart George 的回答及其链接的 PR。
我正在尝试从 wagtailstreamforms 管理页面中删除日期、时间和多选字段,这样它们就不能在站点范围内以任何形式使用。
我试过调用 register('<field_name>', None)
来摆脱它,但这不起作用:
# wagtailstreamforms_fields.py
from wagtailstreamforms.fields import register
@register('date', None)
@register('time', None)
@register('multiselect', None)
并创建一个 AppConfig 来手动清除条目的 wagtailstreamforms.fields._fields 字典,但这似乎也不起作用。我已确保此 AppConfig 是在 wagtailstreamforms 之后加载的应用程序的一部分。
class UpdatedConfig(AppConfig):
name = 'my_new_app'
def ready(self):
from wagtailstreamforms.fields import _fields
_fields.pop('date')
_fields.pop('datetime')
_fields.pop('multiselect')
for x in _fields.keys():
print('{}: {}'.format(x, _fields[x]))
有什么方法可以做到这一点吗,hacky 或其他?我正在使用 Wagtailstreamforms 3.1 和 Wagtail 版本 2.2.2。
{% for child_block in child_blocks.list %}
{% if child_block.name != "date" and child_block.name != "datetime" and child_block.name != "multiselect" %}
<li><button type="button" class="button action-add-block-{{ child_block.name }} icon icon-{{ child_block.meta.icon }}"><span>{{ child_block.label }}</span></button></li>
{% endif %}
{% endfor %}
我是 wagtailstreamforms 的作者并且遇到了这个。限制从包中加载哪些默认表单字段的能力是个好主意。
我建议不要从寄存器方法加载它们,而是从设置字典加载它们,即:
WAGTAILSTREAMFORMS_DEFAULT_FIELDS = {
'singleline': 'wagtailstreamforms.fields.SingleLineTextField',
'multiline': 'wagtailstreamforms.fields.MultiLineTextField',
'dropdown': 'wagtailstreamforms.fields.DropdownField'
}
默认为所有内部字段。这样它就可以很容易地被覆盖。我们将保留 register
装饰器,以免破坏任何东西。
https://github.com/AccentDesign/wagtailstreamforms/pull/110
请在 pr 或 open issue 上留下任何意见/建议。如果您对此感到满意,将更新文档、合并、发布然后可以将其修改为答案。
干杯,斯图
我们可以通过将以下代码放入应用程序的 wagtailstreamforms_fields.py
来获得所需的内容# wagtailstreamforms_fields.py
from wagtailstreamforms.fields import _fields
if _fields.get('date'):
del(_fields['date'])
if _fields.get('datetime'):
del(_fields['datetime'])
if _fields.get('multiselect'):
del(_fields['multiselect'])
所以我猜你可以说它是上述两种方法的混合体。它可能在不久的将来会过时,请参阅 Stuart George 的回答及其链接的 PR。