2011-01-29 7 views
2

私はListProperty(str)を持っている:文字列の書式設定でListProperty(str)プロパティを表す方法は?

class Item(db.Model): 
    tags = db.ListProperty(str) 

時々私はすでにデータストアに書き込まれたタグを編集する必要があるので、私は編集ページを作成しました:

class EditItem(webapp.RequestHandler): 
    def get(self): 
     self.response.out.write("""<div> 
     <form name="submit_form" action="/edititemhandler" method="post"> 

     url: <input type="text" name="url" size=50><br /> 
     <input type="submit" value="submit"> 
     </form></div>""") 

これは、フォームを処理します。

class EditItemHandler(webapp.RequestHandler): 
    def post(self): 
      query = Item.all() 
      query.filter("url =", self.request.get("url")) 
      e = query.get() 
      self.response.out.write(""" 
      <form name="submit_form" action="/edititemhandlerhandler" method="post"> 
      tags: <input type="text" name="tags" size=50 value="%s"> <br /> 
      [other values] 
      ... 
      <input type="submit" value="submit"> 
      </form> """ % (e.tags, ....)) 

タグを編集した後、new_tagsをデータベースに戻します。

class EditItemHandlerHandler(webapp.RequestHandler): 
    def post(self): 
     query = Item.all() 
     query.filter("url =", self.request.get("url")) 
     item = query.get() 
     logging.info("TAGS %s" % self.request.get("tags")) 
     new_tags = self.request.get("tags") 
     item.tags = new_tags 
     [other items] 
     ... 
     item.put() 

しかし、これは

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

しかしlogging.infoリストのように見えるようにself.request.get("tags")を示しています:

TAGS [u'speaking', u'glam'] 

私はリストにnew_tagsをオンにする

item.tags = [new_tags] 

をすれば私が手を

"[u'presidential', u'glam', u'family']" 

リストのようには見えませんが、文字列のように見えます。

したがって、リスト要素を%sでフォーマットしてリストを維持するにはどうすればよいですか?ありがとう。

更新私は私が更新する前に、文字列にタグリストを変換し、リストに変換するために必要なことを考え出し

>>> tag_list = [u'formal', u'flag', u'photo'] 
>>> tag_list_as_string = str(" ".join(tag_list)) 
>>> tag_list_as_string 
'formal flag photo' 
>>> #edit tags 
>>> tag_list_as_string = 'formal flag photo newtag' 
>>> new_tag_list = tag_list_as_string.split(" ") 
>>> new_tag_list 
['formal', 'flag', 'photo', 'newtag'] 
>>> 

あなたは、私がカンマでtag_list_as_stringを得ることができる方法を知っています、このように、

'formal, flag, photo' 

の代わりに、この

のように
'formal flag photo' 

おかげ

+1

'' ListProperty(strの)を使用しないでください - 'StringListPropertyを()'を使用します。そのままにしておくと、最初の127個のコードポイント( 'ASCII')を除くすべてのユニコードを排除するバイト文字列しか格納できません。同様に、文字列にstr()関数を使用しないでください。 –

+1

今後の参考に、必要な回答のタイプが大幅に変更された場合、現在のものを編集する代わりに*新しい質問*を検討することをお勧めします。あなたの質問の前のバージョンと最終バージョン。 – Will

+0

@Nick Johnson:ありがとう。 StringListProperty()に変更されました。 – Zeynel

答えて

1
tag_list = [u'formal', u'flag', u'photo'] 
print ", ".join(tag_list) 
>> formal, flag, photo 
+0

ありがとうございます。しかし今、それをリストに戻して、私はリスト内の項目の間に余分なコンマを得ます。私はそれをそのまま残します。とにかくすべてのタグは1つの単語です。 – Zeynel

+1

@Zeynelコンマで区切るために分割機能を更新する必要があります。 –

関連する問題