“QuerySet”在列表结果之前打印

时间:2017-01-13 22:41:52

标签: python django shell django-queryset

我正在Django建立一个博客。我在终端中的virtualenv中按此顺序运行这些命令:

python manage.py shell

from posts.models import Post

Post.objects.all()

Post.objects.filter(title__icontains=“example”)

Post.objects.create(title=“Djangohead”, content=“Born to raise shell, born to raise shell,
we know how to do it and we do it real well”)

Post.objects.all()

queryset = Post.objects.all()

for obj in queryset:
    print obj.title
    print obj.content
    print obj.updated
    print obj.timestamp
    print obj.id
    print obj.pk

我得到了正确的结果,包括第一个<[<Post: title example>]>

然后我退出,运行服务器,并直接在views.pyindex.html中执行相同的操作。

对于练习,我删除了我在这两个文件中所做的操作并再次运行命令。现在,在输入

之后
python manage.py shell

from posts.models import Post

Post.objects.all()

我在列表前打印了“QuerySet”:

<QuerySet [<Post: title example>]>

为什么突然发生,我该如何将其逆转回原来的样子呢?我在两者之间唯一做的就是更改我的主文件夹名称,但我几乎看不出它是如何相关的。

1 个答案:

答案 0 :(得分:1)

看起来你误解了你在做什么以及你是怎么做的。

直接回答你的问题

  

“为什么会突然发生”

>>> Post.objects.all()
<QuerySet [<Post: title example>]>
当有要返回的项目时,

是预期的行为。由于您没有告诉python将查询集返回给变量,因此将其返回到stdout。

  

如何将其逆转回原来的状态?

发生的事情实际上并不是问题。语言和框架的行为符合预期。

尝试这样的事情:

$ python manage.py shell
>>> from posts.models import Post
>>> post = Post(title=“Djangohead”)
>>> post.save()
>>> other_post = Post(title=“FooBar”)
>>> other_post.save()
>>> posts = Post.objects.all()
>>> for post in posts:
...     print post.title

Djangohead
FooBar

我强烈推荐The Django Tutorial,这将完成所有这些。