导入错误:没有名为 django_filters 的模块

问题描述 投票:0回答:11

我正在使用 Django 1.7.1,我将安装的 django-filters pip 安装到我的虚拟环境中

/.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),我想我应该尝试将其更改为“installed_apps”中的“过滤器”。

我停止并启动了运行服务器,没问题,所以我开始在

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'})

我停止并启动运行服务器,没有问题。然后我开始在views.py中添加一个视图和导入语句:

from donations.filters import DonorFilter

给了我同样的

ImportError: No module named django_filters.
错误。

我尝试将filters.py中的导入更改为filters而不是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。我应该以其他方式安装它(除了 pip 之外)吗?

我对此很陌生,感谢任何帮助!

django django-filter
11个回答
72
投票

我的 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,但新版本上没有

确实是基本的东西,但它确实让我绊倒了。感谢任何花时间调查此问题的人!


13
投票

我也有同样的问题。即使安装后

django-filters
我也无法导入它

导入错误:没有名为 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 过滤。


12
投票

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

这是我的 Django 版本:

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

设置.py:

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

这是正确的安装:

pipenv install django-filter

希望有帮助。


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 freeze 看起来像这样及其工作原理:

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

3
投票

我在已安装的应用程序中从

django_filter
更改为
django_filters
,没问题。


1
投票

我们使用以下方式安装它:

pip install django-filter
或者如果您使用的是pipenv等虚拟环境,请使用
pipenv install django-filter .

上述安装,添加了最新版本的 django-filter。添加“==version”来指定您需要的版本(比如0.11.0)

在app下的settings.py中,确保它是

'django_filters',

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

1
投票

我尝试了以上所有答案,但没有一个对我有用。后来我了解到 pip 脚本没有为 python 命令正在使用的解释器安装模块。

解决方案:

python -m pip install django-filter

0
投票

我在设置

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


0
投票

就我而言,问题是解释器,浪费了一天时间终于解决了问题。请务必检查您是否选择了正确的口译员。在解决问题之前我收到此错误:
未访问“django_filters”Pylance 无法解析导入“django_filters”PylancereportMissingImports 虽然我看到 requirement.txt 显示 django_filters 23.1


0
投票

我也遇到了同样的问题,但我意识到这是因为我在虚拟环境中安装了 django-filter 。 我尝试在同一目录中安装 django-filter 而不激活虚拟环境,并且它有效

我用过

pip install django-filter

0
投票

确保 settings.py 中是

django_filters
而不是
django-filters
。还要继续发现它不是
django-filter
,而是
django-filters
。 但要安装它:

pip install django-filter
© www.soinside.com 2019 - 2024. All rights reserved.