2013-11-20 45 views
0

如何处理使用repeated=True属性的html表单中的值?(重复= True)属性的HTML表单

例如,我有这样的ndb.Model

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

有了这种形式的新book.html内:

​​

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

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

回答

3

良好的裸机解决方案是肯定的,做一个逗号分隔的方法。显然不是最优雅的,但它会工作。

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

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

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

我的青睐的方法是在AJAX经由JSON处理数据,这将消除需要任何处理其他比创建值在JavaScript的阵列。

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

当我使用'self.request.get_all('genre')'时,它返回列表中的结果。例如:'[你好,喜剧,浪漫']。然后我可以像这样拆分它:'genres = [u'horror,comedy,romance']。split(',')',这会返回'[u'horror',u'comedy',u'romance'] '。为什么有一个'u'预设值?理想情况下,我应该把这个存储为'['恐怖','喜剧','浪漫'],对吗?对不起,如果这太简单了;这是我第一次编程。 – puoyaahhh

+2

u表示unicode字符串:)。看看这里的答案:http://stackoverflow.com/questions/11279331/what-does-the-u-symbol-mean-in-front-of-string-values。你应该很好地将它存储在数据存储中。 – iceanfire

1

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