2011-01-29 1 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 так, чтобы он оставался в списке? Благодарю.

Update

я понял, что мне нужно, чтобы преобразовать список тегов в строку перед обновлением, а затем преобразовать его в список:

>>> 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 (строка)' - используйте 'StringListProperty()'. В его основе вы сможете хранить только строки байтов, что исключает весь юникод, кроме первых 127 кодовых точек («ASCII»). Аналогично, не используйте функцию str() для подкрепления материала. –

+1

Для дальнейшего использования, если ваш вопрос редактирует существенно меняет тип ответа, попробуйте задать новый вопрос * вместо * редактирования текущего, вы не можете выбрать лучший ответ как для предыдущей версии, так и для окончательной версии вашего вопроса , – Will

+0

@ Ник Джонсон: Спасибо. Изменено для StringListProperty(). – Zeynel

ответ

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

Спасибо. Но теперь, переведя его обратно в список, я получаю дополнительную запятую между элементами в списке; поэтому я оставлю это как есть. Все теги - это одно слово. – Zeynel

+1

@Zeynel Вам нужно обновить функцию разделения, чтобы разделить также запятые. –

Смежные вопросы