Python 如何对StringListProperty()查询对象进行排序?
我有这个模型:Python 如何对StringListProperty()查询对象进行排序?,python,google-app-engine,sorting,Python,Google App Engine,Sorting,我有这个模型: 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)):
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]))
给予
AttributeError: 'Query' object has no attribute 'sort'
如何对查询的列表进行排序?谢谢
更新
谢谢你的回答。我很难理解查询结果,因此不确定我是否理解下面的评论;但这就是我解决问题的方式,我希望大家能评论一下为什么这是一个好的解决方案,或者为什么这不是一个好的解决方案。(例如,使用range()
进行迭代是否仍然是错误的?)
query=ArticleTagList.all()
items=query.get()
items.article_tags.sort()
对于范围内的i(len(items.article_标记)):
self.response.out.write(“”)
%s“”
%(items.article_标签[i],items.article_标签[i]))
请不要通过对范围内的i(len(tag.article\u tags))执行来遍历列表。
。没有理由<代码>用于标记中的标记。article_标记工作得更好,更具Python风格
要回答您的问题,请不要忘记这里有两个类似列表的东西:一组article标签列表
实例,以及每个实例中的article\u标签列表
。您是否尝试对所有标记进行排序,无论它们位于哪个标记列表中?在这种情况下,您需要将它们全部合并到一个大列表中:
full_list = []
for tag in tag_query:
full_list.extend(list(tag.article_tags))
full_list.sort()
请不要通过对范围内的i(len(tag.article\u tags))执行
来遍历列表。
。没有理由<代码>用于标记中的标记。article_标记工作得更好,更具Python风格
要回答您的问题,请不要忘记这里有两个类似列表的东西:一组article标签列表
实例,以及每个实例中的article\u标签列表
。您是否尝试对所有标记进行排序,无论它们位于哪个标记列表中?在这种情况下,您需要将它们全部合并到一个大列表中:
full_list = []
for tag in tag_query:
full_list.extend(list(tag.article_tags))
full_list.sort()
您可能想要:
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))
标签查询中的物品标签列表的:
article\u tags=已排序(article\u tag\u列表。article\u tags)
对于文章中的标签_标签:
self.response.out.write(“”)
%s“”
%(标签,标签)
您可能需要:
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))
标签查询中的物品标签列表的:
article\u tags=已排序(article\u tag\u列表。article\u tags)
对于文章中的标签_标签:
self.response.out.write(“”)
%s“”
%(标签,标签)
听起来好像您正试图按顺序打印标记,但实际上您正在尝试对实例进行排序。你应该这样做:
for taglist in tag_query:
for tag in sorted(taglist.article_tags):
#...
但是,考虑到您可能总是希望它们按排序顺序存储,因此在创建实体时以及存储实体之前,在实体上调用
taglist.article\u tags.sort()
,以确保标记按排序顺序存储会更容易些。听起来像是在尝试按顺序打印标记,但您正在尝试对实例进行排序,相反你应该这样做:
for taglist in tag_query:
for tag in sorted(taglist.article_tags):
#...
但是,考虑到您可能总是希望它们按排序顺序存储,因此在创建实体时以及存储实体之前,在实体上调用
taglist.article\u tags.sort()
,以确保标记按排序顺序存储会更容易些。tag\u query
返回ArticleTagList
实例,不是标签列表。@Nick Johnson:我仍然对查询返回的内容感到困惑。我得到的是“查询对象没有排序方法”之类的东西。思考查询结果的好方法是什么?由于这是一个StringListProperty
,因此返回的不是列表这一点令人困惑。谢谢。@Zeynel查询对象是对象。如果您使用for循环对它们进行迭代,它们将返回实体—在本例中是,ArticleTagList
实例。如果对它们调用.fetch(num)
(效率更高),它们将返回一个实体列表。tag\u query
返回ArticleTagList
实例,而不是标记列表。@Nick Johnson:我仍然不清楚查询返回的是什么。我得到的是“查询对象没有排序方法”之类的东西。思考查询结果的好方法是什么?由于这是一个StringListProperty
,因此返回的不是列表这一点令人困惑。谢谢。@Zeynel查询对象是对象。如果您使用for循环对它们进行迭代,它们将返回实体—在本例中是,ArticleTagList
实例。如果对它们调用.fetch(num)
(效率更高),它们将返回一个实体列表。“ArticleTagList实例集,以及每个实例中的article_标记列表。”我不明白这意味着什么,也不明白我的哪些变量引用了哪个。我希望能对此作出更多解释。谢谢。“ArticleTagList实例集,以及每个实例中的article_标记列表。”我不明白这意味着什么,或者我的哪些变量引用了哪些。我希望能对此作出更多解释。谢谢。不幸的是,我不明白我做错了什么。在模型ArticleTagList
中,我有属性article\u tags
,它是一个列表。我想在显示之前查询此列表并对其排序。我该怎么做?我明白,正如你所说,最好将列表保存为排序列表。如何将其保存为排序列表?谢谢。@Zeynel:要按顺序显示,请使用我答案中的第一个代码段。要在存储之前对其进行排序,请在第一次创建实体时以及在对其调用.put()
之前使用第二个代码段。不幸的是,我不明白我做错了什么。在模型ArticleTagList
中,我有属性article\u tags
,它是一个列表。我想在显示之前查询此列表并对其排序。我该怎么做?我明白,正如你所说,最好将列表保存为排序列表。如何将其保存为排序列表?谢谢。@Zeynel:要按顺序显示,请使用我答案中的第一个代码段。如此