用于(重复= True)属性的HTML表单

时间:2013-11-20 20:43:02

标签: python forms google-app-engine google-cloud-datastore

如何处理使用repeated=True属性的html表单中的值?

例如,我有 ndb.Model

class Book(ndb.Model):
    title = ndb.StringProperty()
    genre = ndb.StringProperty(repeated = True)

将此表单放在 new-book.html

<form method="post">

    Book Title: <input type="text" name="title">
    Book Genre: <input type="text" name="genre">

    <input type="submit">

</form>

使用type="text"输入是否合适?我是否要求用户“用逗号分隔每个类型”,然后在处理程序中自己处理?以html格式处理此类属性的最佳做法是什么?

(我在这里问了一个关于处理重复的StructuredProperty的相关问题:Google AppEngine: Form handling 'repeated' StructuredProperty

2 个答案:

答案 0 :(得分:3)

一个好的简单解决方案是肯定的,做一个以逗号分隔的方法。显然不是最优雅的,但它会起作用。

book.genre = self.request.get("genre").split(",")

或者,如果重复表单输入字段,则可以重复使用相同的输入“名称”,并通过处理程序中的self.request.get_all()检索所有值。 (See the docs

book.genre = self.request.get_all("genre")

我最喜欢的方法是通过JSON处理AJAX上的数据,这除了在JavaScript中创建值数组之外不需要任何处理。

import json
form_data = json.loads(form_data)
book.genre = form_data['genre']

答案 1 :(得分:1)

如果您事先知道所有可能的类型,那么一组复选框或选择框也可以正常工作。