2011-01-29 51 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'] 

如果我做

item.tags = [new_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')之外的所有unicode。同样,不要使用str()函数来将东西串联起来。 – 2011-01-30 23:41:19

+1

为了将来的参考,如果您的问题编辑会大幅改变所需答案的类型,请考虑提出一个新问题*而不是*编辑当前问题,您无法为以前版本和问题的最终版本选择最佳答案。 – Will 2011-01-31 12:41:41

回答

1
tag_list = [u'formal', u'flag', u'photo'] 
print ", ".join(tag_list) 
>> formal, flag, photo 
相关问题