Zeynel
Zeynel

Reputation: 13525

How to represent a ListProperty(str) property with string formatting?

I have a ListProperty(str):

class Item(db.Model):
    tags = db.ListProperty(str)

Sometimes I need to edit the tags already written to datastore, so I created an edit page:

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>""")

This handles the form:

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, .... ))

After I edit the tags I try to write new_tags back to the database:

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()

But this gives

BadValueError('Property %s must be a list' % self.name)
BadValueError: Property tags must be a list

But logging.info shows self.request.get("tags") to look like a list:

TAGS [u'speaking', u'glam']

If I do

    item.tags = [new_tags]

to turn new_tags into list I get

"[u'presidential', u'glam', u'family']" 

which does not look like a list but looks like a string.

So, how do I format the list element with %s so that it stays a list? Thanks.

Update

I figured that I needed to convert tag list to string before updating and then convert it into list:

>>> 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']
>>>

Do you know how I can get the tag_list_as_string with commas, like this,

'formal, flag, photo'

instead of like this

'formal flag photo' 

Thanks

Upvotes: 2

Views: 561

Answers (1)

systempuntoout
systempuntoout

Reputation: 74134

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

Upvotes: 1

Related Questions