我通过以下方式覆盖了w panel
...
before_input = RichTextField(verbose_name=_('before input'), blank=True)
after_input = RichTextField(verbose_name=_('after input'), blank=True)
panels = [
FieldPanel('label'),
FieldPanel('before_input'),
FieldPanel('after_input'),
FieldPanel('required'),
FieldPanel('field_type', classname="formbuilder-type"),
FieldPanel('choices', classname="formbuilder-choices"),
FieldPanel('default_value', classname="formbuilder-default"),
]
属性:
<form action="{% pageurl page %}" method="POST" class="lm-ls1" id="feedback-form">
{% csrf_token %}
{{ form.question1.help_text }} <!-- Simpler non interable way -->
{{ form.question1.before_input }}
<p>---------------</p>
{% for row in form.fields.values %}
{{row.choices}}
<p>---------------</p>
{{row.help_text}}
<p>---------------</p>
{{row.before_input}}
{% endfor %}
</form>
其他面板是开箱即用的。
这在管理员方面完美运行,并且还将富文本另存为我的数据库
我通过以下方式将此内容传递到我的模板中:
before_input
但我只获取表单面板的html输出,不包括after_input
和Overall, how did you feel about the service you received today?
---------------
[('Very satisfied', 'Very satisfied'), ('Satisfied', 'Satisfied'),
('Neither satisfied nor dissatisfied', 'Neither satisfied nor dissatisfied'), ('Dissatisfied', 'Dissatisfied'), ('Very dissatisfied', 'Very dissatisfied')]
---------------
Overall, how did you feel about the service you received today?
---------------
---------------
个
我正在大致通过以下内容:
before_input
如何访问存储在_formfield
wagtail表中的{{1}}字段面板数据?
答案 0 :(得分:1)
有点迟,但希望这仍然可以帮助你或其他人。
提供给AbstractFormPage模型的视图上下文的Wagtail表单是一个完全实例化的Django表单。这意味着您只能在form
中找到可以提供给Django表单的值。
这包括字段,它们是Django Fields
的实例(例如CharField
),并且没有简单的方法可以为这些字段添加其他属性。
您可以在Wagtail FormBuilder
类定义中看到Form对象的构建方式。
在FormField(Wagtail的FormField)上获取其他属性的一种简单方法是使用模板标记。
在应用中的templatetags
文件夹中创建一个新文件,然后构建一个simple_tag
,它将获取form_page,字段(将是Django Field实例)和字符串你想要获得的属性名称。
# myapp/templatetags/form_tags.py
from django import template
from django.utils.html import mark_safe
register = template.Library()
@register.simple_tag(name='form_field_attribute')
def form_field_attribute(form_page, field, attribute_name, default=None):
"""Return attribute on FormField where field matches 'field' provided."""
# field is a django Field instance
field_name = field.name
results = [
# if html is stored, need to use mark_safe - be careful though.
mark_safe(getattr(form_field, attribute_name, default))
# get_form_fields() is a built in function on AbstractFormPage
for form_field in form_page.get_form_fields()
# clean_name is property on AbstractFormField used for Django Field name
if form_field.clean_name == field_name]
if results:
return results[0]
return default
在模板中,遍历表单(这是Django Form实例)并使用模板助手为您提供所需的额外属性。传递page
或self
的示例与您FormPage
的实例相同。
<form action="{% pageurl page %}" method="POST" role="form">
{% csrf_token %}
{% for field in form %}
<div>{% form_field_attribute page field 'before_input' %}</div>
{{ field }}
<div>{% form_field_attribute page field 'after_input' %}</div>
{% endfor %}
<input type="submit">
</form>