2011-02-06 55 views
0

我有这样的模式:如何排序查询对象是一个StringListProperty()?

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

但是这将是很好的alpabetical以打印这些标签。

当然想

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

回答

1

这听起来像你想打印的标签顺序,但而是尝试对实例进行排序。你应该做这样的事情:

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

但考虑到你可能总是希望他们的排序顺序,它会更容易调用taglist.article_tags.sort()的实体,当你创建它,然后存放好,以确保标签按排序顺序存储。

1

请不要通过做for i in range(len(tag.article_tags))遍历列表。没有理由。 for tag in tag.article_tags工程更好,更Pythonic。

要回答你的问题,不要忘记你在这里有两个类似列表的东西:每个实例中的ArticleTagList实例集合和article_tags列表。您是否尝试对所有标签进行排序,无论它们在哪个标签列表中?在这种情况下,你需要将它们全部连接成一个大名单:

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

full_list.sort() 
+0

“ArticleTagList实例的集合,以及每个实例中article_tags的列表。”我不明白这是什么意思,或者我的哪些变量指的是哪一个。我希望对此有更多的解释。谢谢。 – Zeynel 2011-02-06 22:55:42

2

你可能想:

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)) 
+0

`tag_query`返回`ArticleTagList`实例,而不是标签列表。 – 2011-02-06 22:29:37

+0

@尼克,伊克斯,这是一个愚蠢的错误。 – 2011-02-06 22:37:48