我正试图从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]))
有没有办法做到这一点,无论是骇客还是其他?我正在使用Wagtailstreamforms 3.1和Wagtail版本2.2.2。
答案 0 :(得分:2)
我是wagtailstreamforms的作者,并遇到了这个问题。限制从程序包加载哪些默认表单字段的功能是个好主意。
我建议不要从register方法中加载它们,而是从设置字典中加载它们,即:
WAGTAILSTREAMFORMS_DEFAULT_FIELDS = {
'singleline': 'wagtailstreamforms.fields.SingleLineTextField',
'multiline': 'wagtailstreamforms.fields.MultiLineTextField',
'dropdown': 'wagtailstreamforms.fields.DropdownField'
}
默认为所有内部字段。这样,可以很容易地覆盖它。我们将保留register
装饰器,以免损坏任何东西。
https://github.com/AccentDesign/wagtailstreamforms/pull/110
请留下有关公关或公开问题的任何意见/建议。如果您对此满意,则可以更新文档,合并,发布,然后可以将其修改为答案。
干杯,斯图。
答案 1 :(得分:0)
{% 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 %}
答案 2 :(得分:0)
通过将以下代码放入应用程序的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。