WTForms: 嵌套表单字段, UndefinedError: 'unicode object' 没有属性 'label'

2024-09-30 14:23:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我的表单模型定义如下:

from com.example.cms.forms import FieldList as MyAppFieldList
from flask_wtf                 import Form
from wtforms                   import fields
from wtforms                   import validators

class FacebookPostTranslationForm(Form):
    language    = fields.StringField('Language', [validators.InputRequired(), validators.Length(min=2, max=2)])
    title       = fields.TextAreaField('Title', [validators.InputRequired()])
    description = fields.TextAreaField('Description', [validators.InputRequired()])
    linkUrl     = fields.StringField('Link', [validators.InputRequired(), validators.URL()])
    pictureUrl  = fields.StringField('Picture', [validators.InputRequired(), validators.URL()])

class FacebookPostTemplateForm(Form):
    name         = fields.StringField('Name', [validators.InputRequired()])
    title        = fields.TextAreaField('Title', [validators.InputRequired()])
    description  = fields.TextAreaField('Description', [validators.InputRequired()])
    linkUrl      = fields.StringField('Link', [validators.InputRequired(), validators.URL()])
    pictureUrl   = fields.StringField('Picture', [validators.InputRequired(), validators.URL()])
    translations = MyAppFieldList(fields.FormField(FacebookPostTranslationForm), [validators.Optional()])

class FacebookPostTemplateCreateForm(FacebookPostTemplateForm):
    pass

class FacebookPostTemplateUpdateForm(FacebookPostTemplateForm):
    pass

然后在HTML模板中我有:

^{pr2}$

除了翻译.说明渲染良好。也就是说,这条线引发了问题:

{{ render_field(translation.description, rows=5) }}

如果我用title替换description,效果很好(尽管它渲染title两次,而不是title加上description)。在

使用描述时,我得到以下错误:

{{ field.label(class="control-label") }}
UndefinedError: 'unicode object' has no attribute 'label' 

在以以下内容开头的宏中:

{% macro render_field(field) %}
    <div class="control-group {% if field.errors %}error{% endif %}">
        {{ field.label(class="control-label") }}

我对Python或WTForms还很陌生。description字段名是否有可能导致某些问题/冲突的特殊情况?在

我可以看到数据通过web服务正确地传递到控制器。这个字段的值没有可疑之处。在

要运行的sample code。它是从原始资料中提取出来的,所以在某些地方是一团糟。在

如果更改字段的名称,它将起作用:( 但这意味着我必须在web服务或Python代码中的某个地方更改它。在

谢谢。在


Tags: fromimportformurlfieldfieldstitledescription
1条回答
网友
1楼 · 发布于 2024-09-30 14:23:41

Field本身有descriptionkwarg

class Field(object):
    def __init__(self, label=None, validators=None, filters=tuple(),
                 description='', id=None, default=None, widget=None,
                 _form=None, _name=None, _prefix='', _translations=None):

您要做的是添加到FormField(Field)对象中,该对象也有description

^{pr2}$

在模板中调用translation.description时,WTForms返回的是Field.description,而不是{}

希望有帮助:)

相关问题 更多 >