【问题标题】:I am begginer in Djangio forgive me if it is stupid question. What actually do order_by() in Django?如果这是愚蠢的问题,我是 Django 的初学者,请原谅我。在 Django 中 order_by() 究竟做了什么?
【发布时间】:2021-04-15 10:16:10
【问题描述】:

我阅读了他们说 order_by() 返回一个新 QuerySet 的文档。但是当我打印 Question.objects.order_by('-pub_date') 其中 Question 是 models.py 中的类名时,它会打印 queryset 对象。我很困惑 order_by() 实际上是返回一个新的查询集还是实际执行一个查询? 请在下面的代码中解释在 Django 中执行期间内部发生的情况?

  from django.http import HttpResponse
  from .models import Question
  def index(request): 
   latest_question_list = Question.objects.order_by('-pub_date')[:5]
   output = ', '.join([q.question_text for q in latest_question_list])
   return HttpResponse(output)

还请解释一下上面代码中的第 5 行?

【问题讨论】:

  • 您在问题发布日期之前对问题进行排序,最近的问题在前。
  • 两者都有,隐含的all,因为您不包含任何其他查询
  • 但是代码中的第 5 行呢。能详细解释一下吗?

标签: python django


【解决方案1】:

Django 查询是延迟执行的,因此在您尝试获取结果之前它不会执行查询,因此它说它返回一个查询集。当您对第 5 行的列表理解进行迭代时,您会尝试获取结果..

第 5 行只是在连接字符串操作中使用的列表推导

【讨论】:

  • 那么告诉我查询什么时候执行?
  • 第 5 行当您引用 latest_question_list
  • 表示order_by只返回一个查询,不执行查询。
  • 但是当我在第 5 行之前打印一个 latest_question_list 时,它也会显示关于表格的结果。
  • 这意味着在我们使用 latest_question_list 之前查询不会执行。是真的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
相关资源
最近更新 更多