Django:如何将QuerySet转换为String

vohkndzv  于 2023-10-21  发布在  Go
关注(0)|答案(6)|浏览(134)

我正在使用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>

有人看到丢了什么吗?

iqjalb3h

iqjalb3h1#

{{top_post}}是一个查询集(切片查询集也会产生一个查询集),所以它应该显示它。当您在查询集上循环时,就像在latest上一样,您将显示其中的对象。
{{top_post.0}}将给予top_post包含的对象。
你可唔可以使用

top_post = Post.objects.filter(category='1').first()

直接得到物体。

gab6jxml

gab6jxml2#

您应该在Post模型中实现__str__方法,在该模型中定义要打印的内容。此外,如果您希望返回一个对象,则应该使用.get而不是.filter

okxuctiv

okxuctiv3#

要解决这个问题,你可以使用嵌套循环(一个循环在另一个循环中)

wljmcqd8

wljmcqd84#

将其转换为列表

def 
return(Post.objects.filter(category='1').first)
hgc7kmma

hgc7kmma5#

如果你使用filter,那么我假设你需要多个值,否则使用get方法。你可以把查询集转换成一个列表,然后在列表中播放。

top_post = list(Post.objects.filter(category='1')[:1])[0]

现在top_post将给予列表中的第一个对象。

bwitn5fc

bwitn5fc6#

最后,我们来看看如何从QuerySet对象中获取实际值。这就是我的工作。

list_of_things = TableName.objects.all().values_list('thing', flat=True)

values_list让我选择要返回的列,flat=True将每一列提取(因为没有更好的术语)为对象,从而加载列表。

相关问题