Django:ImportError:无法导入名称 Count

3 投票
2 回答
12557 浏览
提问于 2025-04-15 14:33

我刚从我的GitHub上拉取了代码,然后试着在我的Ubuntu上设置我的应用程序(我之前在家里的Mac上运行这个应用)。

我重新创建了数据库,并重新配置了settings.py,还更新了模板的位置等等。

但是,当我运行服务器命令“python manage.py runserver”时,出现了一个错误,内容是:

ImportError: cannot import name Count

我在views.py中导入了Count,以便使用annotate()函数:

from django.shortcuts import render_to_response
from django.http import Http404, HttpResponse, HttpResponseRedirect
from django.db.models import Count
from mysite.blog.models import Blog
from mysite.blog.models import Comment
from mysite.blog.forms import CommentForm

def index(request):
    #below, I used annotate()
    blog_posts = Blog.objects.all().annotate(Count('comment')).order_by('-pub_date')[:5]

    return render_to_response('blog/index.html', 
                             {'blog_posts': blog_posts})

为什么不行呢?

而且,如果我把“import Count”这一行去掉,错误就消失了,我的应用程序也能正常运行。

谢谢,

Wenbert

更新:

我的models.py看起来是这样的:

from django.db import models

class Blog(models.Model):
    author = models.CharField(max_length=200)
    title = models.CharField(max_length=200)
    content = models.TextField()
    pub_date = models.DateTimeField('date published')

    def __unicode__(self):
            return self.content

    def was_published_today(self):
            return self.pub_date.date() == datetime.date.today()

class Comment(models.Model):
    blog = models.ForeignKey(Blog)
    author = models.CharField(max_length=200)
    comment = models.TextField()
    url = models.URLField()
    pub_date = models.DateTimeField('date published')

    def __unicode__(self):
            return self.comment

更新 2

我的urls.py看起来是这样的:

from django.conf.urls.defaults import *

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/(.*)', admin.site.root),
    (r'^blog/$','mysite.blog.views.index'),
    (r'^display_meta/$','mysite.blog.views.display_meta'),
    (r'^blog/post/(?P<blog_id>\d+)/$','mysite.blog.views.post'),
)

2 个回答

1

我更新了我的Django,发现你的导入语句是对的,因为模块的结构稍微有些变化。你确定你的Django是最新版本吗?

1

这听起来像是你没有在使用Django 1.1。你可以通过打开Django的命令行工具来确认一下,运行下面的代码:

import django
print django.VERSION

如果你在使用1.1版本,你应该会看到类似于 (1, 1, 0, 'final', 0) 的结果。

撰写回答