我正在使用Python 3,并试图将QuerySet转换为人类可读的文本。我有这样一句台词:
top_post = Post.objects.filter(category='1')[:1]
它的打印结果是这样的:
<QuerySet [<Post: Test Post 1>]>
让我挠头的是,类似的QuerySet在通过模板显示时成功转换:
latest = Post.objects.order_by('-published_date')[:5]
“Latest”在模板中使用for...循环:
{% for latest_posts in latest %}
<h1>{{ latest_posts }}</h1>
而“top_post”只显示空白:
<h1>{{ top_post }}</h1>
有人看到丢了什么吗?
6条答案
按热度按时间iqjalb3h1#
{{top_post}}
是一个查询集(切片查询集也会产生一个查询集),所以它应该显示它。当您在查询集上循环时,就像在latest
上一样,您将显示其中的对象。{{top_post.0}}
将给予top_post
包含的对象。你可唔可以使用
直接得到物体。
gab6jxml2#
您应该在Post模型中实现
__str__
方法,在该模型中定义要打印的内容。此外,如果您希望返回一个对象,则应该使用.get
而不是.filter
。okxuctiv3#
要解决这个问题,你可以使用嵌套循环(一个循环在另一个循环中)
wljmcqd84#
将其转换为列表
hgc7kmma5#
如果你使用filter,那么我假设你需要多个值,否则使用get方法。你可以把查询集转换成一个列表,然后在列表中播放。
现在
top_post
将给予列表中的第一个对象。bwitn5fc6#
最后,我们来看看如何从QuerySet对象中获取实际值。这就是我的工作。
values_list
让我选择要返回的列,flat=True
将每一列提取(因为没有更好的术语)为对象,从而加载列表。