ImportError:没有名为django_filters的模块

时间:2015-04-28 20:21:40

标签: django django-filter

我正在使用Django 1.7.1,并将已安装的django-filters添加到/.virtualenvs/auction2/lib/python2.7/site-packages$

的虚拟环境中

它说已成功安装。

所以我将django-filters放在已安装的应用程序中,如下所示:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'crispy_forms',
    'django_filters',
    'donations',
)

我跑python manage.py runserver并收到此错误:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/Dani/.virtualenvs/auction2/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/Users/Dani/.virtualenvs/auction2/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
    django.setup()
  File "/Users/Dani/.virtualenvs/auction2/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/Dani/.virtualenvs/auction2/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/Users/Dani/.virtualenvs/auction2/lib/python2.7/site-packages/django/apps/config.py", line 87, in create
    module = import_module(entry)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named django_filters

它说安装了,但为什么不能导入呢?我有另一个包装,酥脆的形式,安装和工作。我在虚拟环境中查看了我的网站包,我看到了:

crispy_forms
django
django_braces-1.4.0.dist-info
django_crispy_forms-1.4.0-py2.7.egg-info
django_filters-0.1.0-py2.7.egg-info
easy_install.py
easy_install.pyc
filters
pip

看到它作为'过滤器'而不是文档所说的导入它(django_filters),我想我会尝试将它更改为只在instal_apps中的'过滤器'。

我停止并启动了runserver,没问题,所以我开始在filter.py中构建我的过滤器:

import django_filters
from donations.models import Donor, Item, Issue

class DonorFilter(django_filters.FilterSet):
    class Meta:
        model = Donor
        fields = {'type':['exact'],'donor':['icontains'],}

        def __init__(self, *args, **kwargs):
            super(DonorFilter, self).__init__(*args, **kwargs)
            self.filters['type'].extra.update(
                {'empty_label': 'All Types'})

我停下来启动runserver,没问题。然后我开始在views.py:

添加一个视图和import语句
from donations.filters import DonorFilter

给了我同样的ImportError: No module named django_filters.错误。

我尝试将filters.py中的导入更改为过滤器而不是django_filters,但错误没有改变。我将所有内容更改回django_filters(在installed_apps和我的filters.py中),正如文档所说,我在添加视图时收到错误global name 'DonorFilter' is not defined。这是view.py:

def donor_list(request):
    f = DonorFilter(request.GET, queryset=Donor.objects.all())
    return render_to_response('donations/donor_list', {'filter': f})

这意味着我需要导入我在filters.py中创建的函数?所以我补充一下 from donations.filters import DonorFilter在我的观点之上。 然后错误是'module' object has no attribute 'FilterSet'

我可以在virtualenv

中安装的filters.py文件中看到FilterSet类

我注意到django-filter有更多的开发,https://github.com/alex/django-filter页面达到v0.9.2,但是pip安装0.1.0。我应该以另一种方式安装它(除了点子)吗?

我对此非常陌生并感谢任何帮助!

7 个答案:

答案 0 :(得分:36)

我的pip版本很旧,很旧。 1.5.6当我安装我的虚拟环境时,它只是工作,所以我没有提问。学过的知识!以下是我帮助别人的事情......

在虚拟环境中,我按照文档中的描述安装了pip: https://pip.pypa.io/en/stable/installing.html python get-pip.py这使我升级为pip 6.1.1

pip install django-filter
pip freeze > requirements.txt

阅读requirements.txt显示我有

django-filter==0.9.2
django-filters==0.1.0

所以我用pip uninstall django-filters

卸载了旧版本

注意旧版本上的s,但不注意新版本

真的是基本的东西,但它真的让我失望了。感谢任何花时间研究这个的人!

答案 1 :(得分:10)

我也有同样的问题。即使安装django-filters后我也无法导入

  

ImportError:没有名为django_filters的模块

我使用的Django版本是1.8,python版本是2.7.x

解决方案是安装djangorestframework-filters

pip install djangorestframework-filters

名字很混乱。

然而,django-rest-framework-filters是Django REST框架和Django过滤器的扩展,可以轻松跨关系进行过滤,而Django-filter是一个可重用的Django应用程序,允许用户以声明方式从URL参数添加动态QuerySet过滤。

答案 2 :(得分:3)

我有一个类似的问题,使用django 1.7,djangorestframework == 3.2.0和最新的django-filter == 0.13.0:

Using DjangoFilterBackend, but django-filter is not installed
cannot import name Expression

我最后通过将django-filter降级到0.11来修复它。

现在pip冻结看起来像这样,它的工作原理:

Django==1.7
django-filter==0.11.0
djangorestframework==3.2.0

答案 3 :(得分:2)

我在安装django-filter == 2.2.0时也遇到了这个问题

这是我的Django版本:

Django [required: >=1.11, installed: 2.2]

settings.py:

INSTALLED_APPS = [
    # ...
    'django_filters',
]

我错误地安装了:

pipenv install django_filters

这是正确的安装:

pipenv install django-filter

希望有帮助。

答案 4 :(得分:0)

在已安装的应用中,我从django_filter更改为django_filters,没关系。

答案 5 :(得分:0)

确保 settings.py 中的 django_filters 而不是 django-filters。还要保持找到它不是django-filter,它的django-filters。 但是要安装它: pip install django-filter

答案 6 :(得分:0)

我在设置 django_filters 中删除了 INSTALLED_APPS。这对我有用