首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在冒号和变形中预先创建映射模式序列

在冒号和变形中预先创建映射模式序列
EN

Stack Overflow用户
提问于 2015-05-17 23:17:28
回答 1查看 686关注 0票数 1

我正在建设一个页面,用户可以留下评论,任何数量的产品,在冒号和变形。我已经掌握了所有必要的要素,但我仍然有一些问题,连接点。具体来说,我如何(动态)创建N个表单项的序列,然后为它们绑定数据?

这是我在这方面的尝试:

代码语言:javascript
复制
reviews =[
        {
            "product": "Shampoo",
            "comment": ""
            "rating": 3,
        },

        {
            "product": "Soap",
            "comment": "",
            "rating:" 3,
        },
    ]

rating = colander.Schema()
rating.add(colander.SchemaNode(colander.Int(), name="rating", missing=colander.null, validator=colander.Range(1, 5)))
rating.add(colander.SchemaNode(colander.String(), name="comment", validator=colander.Length(max=4096), missing=""))
ratings = colander.SequenceSchema(name="ratings", default=reviews, children=[rating])

# schema.add(colander.SchemaNode(colander.Sequence(), rating, name="ratings", default=reviews))
schema = CSRFSchema()
schema.add(ratings)

form = deform.Form(schema)
if request.method == "POST":
    controls = request.POST.items()

    try:
        captured = form.validate(controls)
    except deform.ValidationFailure as e:
        return {'form': e.render()}
else:
    rendered_form = form.render()

return locals()

但这会导致错误:

代码语言:javascript
复制
ValueError: Prototype for <deform.field.Field object at 4576735072 (schemanode 'ratings')> has no name
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-17 23:27:00

好吧-弄清楚了。必须命名最内部的SchemaNode()。必须使用colander.SchemaNode(colander.Sequence())来绘制项目序列。

代码语言:javascript
复制
reviews =[
        {
            "product": "Shampoo",
            "comment": "",
            "rating": 3,
        },

        {
            "product": "Soap",
            "comment": "",
            "rating": 3,
        },
    ]

rating = colander.Schema(name="single_rating")
rating.add(colander.SchemaNode(colander.Int(), name="rating", missing=colander.null, validator=colander.Range(1, 5)))
rating.add(colander.SchemaNode(colander.String(), name="comment", validator=colander.Length(max=4096), missing=""))
ratings = colander.SchemaNode(colander.Sequence(), rating, name="ratings", default=reviews)

# schema.add(colander.SchemaNode(colander.Sequence(), rating, name="ratings", default=reviews))
schema = CSRFSchema()
schema.add(ratings)

form = deform.Form(schema)
if request.method == "POST":
    controls = request.POST.items()

    try:
        captured = form.validate(controls)
    except deform.ValidationFailure as e:
        return {'form': e.render()}
else:
    rendered_form = form.render()

return locals()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30293112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档