2012-06-29 57 views
0

我希望用戶的輸入最終使用db.stringListProperty()建模。如果可能的話,輸入格式必須是什麼樣子,以及用戶的輸入如何構建([],引號和逗號等)?我使用jinja2作爲表單模板,如果這很重要的話。 (如何驗證數據輸入是否正確,請額外付款。) 謝謝。用戶可以在html表單中輸入一個沒有javascript的python列表

我從appengine中得到這個錯誤。

raise BadValueError('Property %s must be a list' % self.name) 
BadValueError: Property choices must be a list 

該錯誤發生在下面的這一行。

person.choices = self.request.get(「選擇」)

class PQ(db.Model): 
    choices = db.StringListProperty() 


    key = db.Key.from_path("PQ", ID_id) 
    person = PQ.get(key) 
    template_values = {'ID_id':person.key(), 
         'p': person, 
         } 
    path = os.path.join(TEMPLATE_DIR, 'add_person.html') 
    self.response.out.write(template.render(path, template_values)) 


class AddPerson(BaseHandler): 
    def post(self): 
     ID_id = self.request.get('ID') 
     key = db.Key.from_path("PQ", ID_id) 
     person = PQ.get(key) 

     person.choices = self.request.get('choices') 
     person.put() 
     self.redirect("/?ID=%s" % ID_id) 



add_person.html 
<html> 
    <body> 

<div id="inputdata"> 
    <form action="add_person" method="post" enctype="multipart/form-data"> 
     <label>Enter your list of choices. Your list must follow this format: 
      ["Less","Same","More"] </label> 
    <input type="textbox" name="choices" size="30" value="{{ p.choices }}"></input><br/> 
    <input type="submit" value="Submit"></input> 
    </form> 
</div> 
    </body> 
</html> 
+0

StackOverflow不是讓人們爲你寫代碼的地方。這是一個請求您編寫的代碼獲得幫助的地方。 – Dancrumb

+0

好的,我編輯了這個問題以包含我的代碼和錯誤消息。 – zerowords

回答

0

看來你得到這個錯誤,因爲choices必須是一個列表類型,但在請求中獲得的價值是一個字符串 - 它會一直存在,因爲你從HTTP請求中獲取它。

在表單方面,用戶輸入數據的格式並不重要,因爲它總是作爲字符串傳遞 - 逗號分隔的列表應該足夠了。然後你可以用例如self.request.get('choices').split(",")(並修剪你側面的空白,以免打擾用戶確切的空白要求)。最佳做法決定你應該儘可能地協助用戶 - 如果你有一組預定義的選擇,你可以使用Select2或類似的小工具來指導用戶做出選擇。

+0

使用.split(「,」)對我來說幾乎是一個完美的答案,如果我給我的用戶的格式如下:['Less','Same','More']。但是回聲輸出看起來像這樣:[u'Less',u'Same',u'More']。有一些jinja2或python函數可以返回輸出,所以它看起來像['Less','Same','More']?或者更好的是,有沒有辦法在分割中使用空間並將感知結果返回爲空格分隔的字符串? TIA – zerowords

+0

''''''''''''''''''就意味着你得到了unicode字符串(這是Python的默認行爲,據我記得)。你有什麼問題?無論如何,在split()中使用空格不會有任何問題。 – egasimus

+0

我的問題是通過使用你的.split想法來解決的,它使用空格分割:self.request.get('choices').split(),這裏的選項是html表單上的一個臨時變量。然後加入名單person.choices以產生html結果:choices =''.join(person.choices)。用戶提供以空格分隔的列表,例如:Less Same More。非常感謝。 – zerowords

相關問題