0

J'ai une application qui prend quelques paramètres via un formulaire html puis crée une entité modèle. Le problème est que tout ce que j'essaie, je reçois une erreur comme ceci:google app engine - comment obtenir ListProperty à partir de l'entrée d'un formulaire html type = "text"

BadValueError: Property xxx must be a list 

c'est le modèle:

xxx = db.ListProperty(int) 

c'est la phrase utilisée pour obtenir la liste:

xxx = self.request.get('xxx') 

Je suppose que la forme html renvoie une chaîne lorsque j'appuie sur le bouton submit. Alors, comment pourrais-je obtenir une liste d'une entrée type = "text" dans un formulaire html? Si j'écris 1,2 ça ne va pas, comme ce n'est pas autre chose.

Le code python est similaire à l'application helloworld où un formulaire est utilisé pour publier des messages d'accueil sur la page, la différence est que je dois obtenir une liste, pas de texte.

self.response.out.write(""" 
      <form action="/sign" method="post"> 
      <div><textarea name="content" rows="3" cols="60"></textarea></div> 
      <div><input type="submit" value="Sign Guestbook"></div> 
      </form> 
     </body> 
     </html>""") 

class Guestbook(webapp.RequestHandler): 
    def post(self): 
     greeting = Greeting() 

     if users.get_current_user(): 
      greeting.author = users.get_current_user() 

     greeting.content = self.request.get('content') 
     greeting.put() 
     self.redirect('/') 

Est-ce la meilleure façon d'obtenir l'entrée d'utilisateur pour créer une entité modèle et comment puis-je résoudre ce problème afin qu'il obtenir une liste et l'écrire dans les modèles attributs?

+1

S'il vous plaît modifier votre question et de montrer où sous la forme que vous mettez une liste à envoyer au serveur. – fjsj

Répondre

0

Vous devez placer des listes à l'intérieur de xxx, et non des chaînes ou des entiers.

Peut-être que vous souhaitez utiliser la méthode request.get_all, au lieu de l'obtenir.

2

La solution est très simple, une fois un expert m'a montré :)

tlist = map(lambda x: int(x), self.request.get_all('xxx')) 
+1

'lambda x: int (x)' peut être remplacé par simplement 'int' –

Questions connexes