2013-11-20 83 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

如果您事先知道所有可能的流派,那麼一組複選框或選擇框也可以正常工作。