Как я сортирую объект запроса, который является StringListProperty ()? - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть эта модель:

class ArticleTagList(db.Model):
    article_tags = db.StringListProperty()

В EditArticleHandler я делаю:

        tag_query = ArticleTagList.all()

        for tag in tag_query:
            for i in range(len(tag.article_tags)):

                self.response.out.write(""" <span id="small-tags">
                <input type="checkbox" name="article_tag" value="%s">%s  </span>"""
                 % (tag.article_tags[i], tag.article_tags[i]))

Но было бы неплохо напечатать эти теги в алфавитном порядке.

Конечно, пытаясь

        tag_query.sort()

дает

AttributeError: 'Query' object has no attribute 'sort'

Как мне отсортировать запрошенный список? Спасибо.

Обновление

Спасибо за ответы. У меня проблемы с пониманием результатов запроса, поэтому я не уверен, что понимаю комментарии ниже; но это то, как я решил это, и я был бы признателен за комментарии, почему это хорошее решение или почему это не хорошее решение. (например, все еще неправильно использовать range() для итерации?) Спасибо!

    query = ArticleTagList.all()
    items = query.get()

    items.article_tags.sort()

    for i in range(len(items.article_tags)):
        self.response.out.write(""" <span id="small-tags">
            <input type="checkbox" name="article_tag" value="%s">%s  </span>"""
             % (items.article_tags[i], items.article_tags[i]))

Ответы [ 3 ]

2 голосов
/ 07 февраля 2011

Вы, вероятно, хотите:

    for article_tag_list in tag_query:
        article_tags = sorted(article_tag_list.article_tags)
        for tag in article_tags:
            self.response.out.write("""<span id="small-tags">
            <input type="checkbox" name="article_tag" value="%s">%s  </span>"""
             % (tag, tag))
1 голос
/ 07 февраля 2011

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

for taglist in tag_query:
  for tag in sorted(taglist.article_tags):
    #...

Но, учитывая, что вы, вероятно, всегда хотите, чтобы они были в отсортированном порядке, было бы проще вызвать taglist.article_tags.sort() для объекта, когда вы его создаете, и перед вамисохраните его, чтобы убедиться, что теги хранятся в отсортированном порядке.

1 голос
/ 07 февраля 2011

Пожалуйста, не просматривайте список, выполнив for i in range(len(tag.article_tags)). Там нет причин для этого. for tag in tag.article_tags работает намного лучше и более питоничен.

Чтобы ответить на ваш вопрос, не забывайте, что у вас есть две подобные списку вещи: набор ArticleTagList экземпляров и список article_tags в каждом экземпляре. Вы пытаетесь отсортировать все теги, независимо от того, в каком списке тегов они находятся? В этом случае вам нужно будет объединить их всех в один большой список:

full_list = []
for tag in tag_query:
    full_list.extend(list(tag.article_tags))

full_list.sort() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...