У меня есть 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'
Благодаря
Не используйте 'ListProperty (строка)' - используйте 'StringListProperty()'. В его основе вы сможете хранить только строки байтов, что исключает весь юникод, кроме первых 127 кодовых точек («ASCII»). Аналогично, не используйте функцию str() для подкрепления материала. –
Для дальнейшего использования, если ваш вопрос редактирует существенно меняет тип ответа, попробуйте задать новый вопрос * вместо * редактирования текущего, вы не можете выбрать лучший ответ как для предыдущей версии, так и для окончательной версии вашего вопроса , – Will
@ Ник Джонсон: Спасибо. Изменено для StringListProperty(). – Zeynel