私は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'
おかげ
'' ListProperty(strの)を使用しないでください - 'StringListPropertyを()'を使用します。そのままにしておくと、最初の127個のコードポイント( 'ASCII')を除くすべてのユニコードを排除するバイト文字列しか格納できません。同様に、文字列にstr()関数を使用しないでください。 –
今後の参考に、必要な回答のタイプが大幅に変更された場合、現在のものを編集する代わりに*新しい質問*を検討することをお勧めします。あなたの質問の前のバージョンと最終バージョン。 – Will
@Nick Johnson:ありがとう。 StringListProperty()に変更されました。 – Zeynel