2011-01-29 35 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 
相關問題