如何处理使用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)
答案 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)
如果您事先知道所有可能的类型,那么一组复选框或选择框也可以正常工作。