在这个django视图中我的功能有什么问题?

时间:2015-12-26 23:05:04

标签: python django python-3.x

这应该很容易......我参加了一个课程以及这种结构的方式,view.py文件可以单独用于此测验 - 它更像是一个挑战。好的,所以请求是这样的: "现在,创建一个名为article_list的视图,选择所有文章实例并返回一个HttpResponse,如"有5篇文章。"请务必使用Article查询集的len()来获取文章数。"

作为参考,第一部分有效。无论如何,view.py文件看起来像这样(第一部分是我导入文章的地方......猜测我不需要渲染导入。):

from django.http import HttpResponse
from django.shortcuts import render

from .models import Article

# Write your views here
def article_list(request):
  articles = Article.objects.all()
  article_count = articles.len()
  output = "There are {} articles.".format(str(article_count))
  return HttpResponse(output)

我不确定len函数和/或str函数是否应该像这样链接,或者它们是否应该包装对象。我试过把articles.len()。str(),但似乎没有用。
在此先感谢您的帮助, 布鲁斯

3 个答案:

答案 0 :(得分:4)

你可以试试这个:

iframe

len是一个调用对象的函数,format方法已经为你调用了str方法。

答案 1 :(得分:4)

使用.all()来计算记录数量会引入unnecessary overhead

  

如果您只需要确定集合中的记录数(和   不需要实际的对象),处理一个更有效率   使用SQL的SELECT COUNT(*)计算数据库级别。 Django的   正是出于这个原因提供了count()方法。

使用.count()直接从数据库中获取count

articles_count = Article.objects.count()
output = "There are {} articles.".format(article_count)

这是一种普遍接受的计算记录的方法,除非实际需要记录实例,或者,如果有特定要求,则视情况而定:

  

请务必使用文章查询集的len()来获取文章数。

考虑到问题是如何陈述的,@ Andoni的答案应该被接受。

答案 2 :(得分:1)

  

注意:如果您只想确定集合中的记录数,请不要在QuerySets上使用len()。使用SQL的SELECT COUNT(*)来处理数据库级别的计数效率要高得多,而Django正是出于这个原因提供了count()方法。见下面的count()。

Source